欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    河北工业大学-汇编实验报告(共30页).doc

    • 资源ID:14352210       资源大小:257.50KB        全文页数:30页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    河北工业大学-汇编实验报告(共30页).doc

    精选优质文档-倾情为你奉上 汇编实验 实验一 顺序与分支程序设计 一 、实验目的 1) 掌握顺序程序设计方法。2) 掌握分支程序的结构及分支程序的设计,调试方法。 2) 学习数据传送及算术和逻辑运算指令的用法。 3) 熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序的过程。 二、实验内容 1) 有一字变量BUF1是以原码表示的有符号数,要求将其转换为反码和补码,分别存入BUF2和BUF3单元,并在屏幕上显示出来。 2)有两个两字节无符号数分别放在存储单元A、B起始的缓冲器中,求其和,结果放在A起始的缓冲区并在屏幕上显示。相加若有进位不存入存储单元。 3) 在BUF和BUF+1、BUF+2单元分别放有一个无符号字节型数,编程序将其中最大数存入MAX单元,并在屏幕上显示。 4) 要求同上,只是比较的数为有符号数。 5) 将1000H单元开始的10个字节数,采用奇偶校验,将奇数在前偶数在后仍存回原数据区。本实验要求在DEBUG调试状态下进行,包括汇编程序、运行程序、检查结果。6) 从键盘上接收一位十进制数X,计算Y值,并以十六进制形式显示出来,Y按下列公式计算。7) 从键盘上接收两个一位十六进制数X和Y,然后再输入一个A-D之间的一个字符,按下列要求计算。a) 当输入字符为A,则计算X+Y,并以十六进制形式显示出来b) 当输入字符为B,则计算|X-Y|,并以十六进制形式显示出来c) 当输入字符为C,则计算X*Y,并以十六进制形式显示出来d) 当输入字符为D,则计算X/Y,并以十六进制形式显示出来三、实验设备 PC机一台 四、实验准备 1) 分析题目,将程序中的原始数据和最终结果的存取方法确定好。 2) 画出流程图。 3) 写出源程序。 4) 对程序中的结果进行分析,并准备好上机调试与用汇编程序及汇编调试的过程。 五、实验步骤 1) 输入源程序。 2) 汇编、连接程序,生成 .EXE文件,执行文件,检查结果。 六、实验报告的要求 1) 列出源程序,说明程序的基本结构,包括程序中各部分的功能。 2) 说明程序中各部分所用的算法。 3)说明主要符号和所用到寄存器的功能。 4) 总结为什么在设计分支程序时必须解决三个问题:判断、转向和定标号。 5) 说明标志位CF、SF和OF的意义。 6) 上机调试过程中遇到的问题是如何解决的。 7) 对调试源程序的结果进行分析。Exam1:DATA   SEGMENT ;数据段BUF1   DW  7898H BUF2   DW  4  DUP (0), 0AH, 0DH,'$' BUF3   DW  4  DUP (0), '$' DATA   ENDS ;数据段结束CODE   SEGMENT ;代码段     ASSUME  CS:CODE, DS:DATA ;段寄存器关联说明伪指令BEGIN:   MOV  AX, DATA     MOV  DS, AX ;将数据段的基地址装入数据段寄存器DS      MOV  AX, BUF1 ;将字型变量BUF1的值装入AX寄存器     ADD  AX, 0 ;AX寄存器里的数据加0,以便进行转移测试         JS  NEXT ;判断(AX)的正负,若为负则转到NEXT,为正则往下顺序执行。         MOV  BUF2, AX ;为正,反码与原码一样         MOV  BUF3, AX ;为正,补码与原码一样         JMP   EEE NEXT: AND  AX, 7FFFH ;将符号位变为0         NOT  AX ;求反码         MOV  BUF2, AX ;将BUF1的反码装入BUF2         INC   AX ;求补码         MOV  BUF3, AX ;将补码装入BUF3EEE: MOV  CX, 0004H ;将0004H装入CX计数器寄存器中       MOV  DI, OFFSET  BUF2 ;将DI指向变量BUF2开始的存储单元       MOV  DX,  DI ;将DI所指的数据装入DX寄存器中       ADD  DI, 03 ;将DI指针下移三个字 BBB: MOV  AX, DX ;将DX中的内容装入AX寄存器中       AND  AX, 000FH ;即使BUF2的低四位不变,其余均变为0       CMP  AL, 0AH ;比较AL与0AH的大小,以便能正确转换为0-9的ASCII值       JB  QQQ ;若AL<0AH,则转到QQQ,否则,顺序执行       ADD  AL, 07H ;因为AL>0AH,所以AL +07H,使得AL能转换成相应数字的ASCII值QQQ: ADD  AL, 30H ;将AL转换成相应数字的ASCII值     MOV  DI, AL ;将AL中的内容装入以DS中的内容为段基地址,以DI的内容为偏移地址的存储单元中     DEC  DI ;DI=DI-1,即将DI指向前一个存储单元     PUSH  CX ;保存CX寄存器的内容     MOV  CL, 04H ;给CL寄存器赋值为04H     SHR  DX, CL ;将DX逻辑右移四位     POP  CX ;恢复CX寄存器的内容     LOOP  BBB ;循环判断语句,CX=CX-1,若CX不等于0,则转到BBB,将下一个低四位存入存储单元中,否则循环结束     MOV  CX, 0004H ;给CX寄存器赋值为0004H     MOV  SI, OFFSET  BUF3 ;将SI指向变量BUF3开始的存储单元     MOV  DX, SI ;将SI所指的数据装入DX寄存器中     ADD  SI, 03H ;将DI指针下移三个字CCC: MOV  AX, DX ;将DX中的内容装入AX寄存器中     AND  AX, 000FH ;即使BUF3的低四位不变,其余均变为0    CMP  AL, 0AH ;比较AL与0AH的大小,以便能正确转换为0-9的ASCII值    JB  DDD ;若AL<0AH,则转到DDD,否则,顺序执行    ADD  AL, 07H ;因为AL>0AH,所以AL +07H,使得AL能转换成相应数字的ASCII值DDD:ADD  AL,  30H ;将AL转换成相应数字的ASCII值    MOV  SI, AL ;将AL中的内容装入以DS中的内容为段基地址,以SI的内容为偏移地址的存储单元中    DEC  SI ;SI=SI-1,即将SI指向前一个存储单元    PUSH  CX ;保存CX寄存器的内容    MOV  CL,  04H ;给CL寄存器赋值为04H    SHR  DX,  CL ;将DX逻辑右移四位    POP  CX ;恢复CX寄存器的内容    LOOP  CCC ;循环判断语句,CX=CX-1,若CX不等于0,则转到CCC,将下一个低四位存入存储单元中,否则循环结束    MOV  DX,  OFFSET  BUF2 ;将BUF2的偏移地址装入DX寄存器中    MOV  AH, 09H     INT  21H ;在屏幕上显示BUF1的反码    MOV  DX, OFFSET  BUF3     MOV  AH, 09H    INT  21H ;在屏幕上显示BUF1的补码    MOV  AH, 4CH    INT  21H ;带返回码终止    CODE  ENDS     END  BEGINExam2:DATA  SEGMENT ;数据段A  DB  34H, 18H, 2  DUP (0),  '$' ;定义字节型变量,其后的每操作数都占有一个字节B  DB  56H,  83H ;定义字节型变量,其后的每操作数都占有一个字节DATA   ENDS ;数据段结束CODE  SEGMENT ;代码段ASSUME  CS: CODE,  DS:DATA START: MOV  AX, DATAMOV  DS,  AX ;将数据段基地址装入数据段寄存器DSMOV  AL,  A ;将A所指的数装入AL寄存器中MOV  BL,  B ;将B所指的数装入BL寄存器中ADD  AL,  BL ;AL+BL->ALMOV  AH,  A+1 ;将A所指的下一个字节的数据装入AHMOV  BH,  B+1 ;将B所指的下一个字节的数据装入BHADC  AH, BH ;AH与BH进行带进位加法MOV  A, AL ;将第一个无符号数的相加结果放在以A起始的缓冲区MOV  A+1, AH ;将第二个无符号数的相加结果放在以A+1起始的缓冲区MOV  CX, 0014H ;以下是将数据转换为相应的ASCII值MOV  DI,  OFFSET A MOV  DX,  DIADD  DI,  03NEXT: MOV  AX, DXAND  AX, 000FHCMP  AL, 0AHJB  QQQADD  AL, 07HQQQ: ADD  AL, 30HMOV  DI,  ALDEC  DIPUSH  CXMOV  CL,  14SHR   DX,  CLPOP   CXLOOP   NEXTMOV  DX,  OFFSET  AMOV  AH, 09HINT   21H ;在屏幕上显示结果MOV  AH, 4CHINT  21H ;带返回码终止CODE  ENDSEND  STARTExam3:STACK  SEGMENT  STACK ;堆栈段DB  1000  DUP (0) ;定义其后的每个操作数都占有一个字节STACK  ENDS ;堆栈段结束DATA  SEGMENT ;数据段BUF  DB 72H, 34H, 1FH ;定义字节型变量,其后的每操作数都占有一个字节MAX  DB  2  DUP  (?),  '$' ;定义字节型变量,其后的每操作数都占有一个字节DATA   ENDS ;数据段结束CODE   SEGMENT ;代码段ASSUME  CS:CODE, DS:DATA, SS:STACK BEGIN:  MOV  AX,  DATAMOV   DS,  AX ;将数据段基地址装入数据段寄存器DSMOV   AL,  BUF ;将BUF所指向的一个字节数据装入ALCMP   AL,   BUF+1 ;比较BUF与BUF+1大小JNB    LP1 ;如果BUF不小于BUF+1,则转到lp1,否则顺序向下执行MOV   AL,  BUF+1 ;将BUF+1所指向的一个字节数据装入ALLP1:   CMP   AL,   BUF+2 ;将BUF和BUF1中较大的一个和BUF+2比较大小JAE    LP2 ;如果BUF2小,则转到lp2,否则执行顺序向下执行MOV   AL,  BUF+2 ;此时BUF2为三个数中最大的一个,将最大数装入AL寄存器中LP2:   MOV   CX,  04H ;以下是将输出的最大数转换为相应的ASCII值MOV   DI,  OFFSET   MAX MOV   DL,  ALINC    DILP3:    AND   AL,  0FHCMP   AL,  0AHJB     LP4ADD   AL,  07HLP4:   ADD  AL,  30HMOV  DI, ALDEC   DIPUSH   CXMOV   CL,  03HSHR   DL,  CL POP   CXMOV   AL,  DLLOOP   LP3MOV   DX,  OFFSET  MAXMOV   AH,  09HINT    21HMOV   AH,          4CHINT       21HCODE     ENDSEND      BEGIN Exam4:STACK   SEGMENT   STACKDB 1000      DUP(0)STACK   ENDSDATA      SEGMENT BUF DB       98H,              75H,              32HMAX      DB 4    DUP (?),       '$'DATA     ENDSCODE     SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKBEGIN:   MOV      AX, DATAMOV      DS,  AXMOV      AL,  BUF CMP      AL,  BUF+1JG          LP1 ;JG为比较两个有带符号数的大小,比较BUF和BUF1的大小,若BUF>BUF1,则跳转到lp1继续执行,否则顺序向下执行XCHG     AL,       BUF+1 ;交换AL寄存器中的内容和BUF1,使AL寄存器中存放BUF和BUF1中较大的一个LP1:        MOV      MAX,     AL JGE lp2;比较两个带符号数,如果BUF2小,则转到lp2,否则执行顺序向下执行MOV AL, BUF+2Lp2: MOV MAX, AL;以下是将输出的最大数转换为相应的ASCII值,与1)题相同MOV      CX,       04HMOV      DI,         OFFSET        MAXMOV      DL,         DIINC       DILP3:        MOV      AL,  DLAND      AL,  0FHCMP      AL,  0AHJB           LP4 ADD      AL,  07HLP4:        ADD AL,       30HMOV      DI,     ALDEC       DIPUSH      CXMOV      CL,  02SHR       DX,        CLPOP       CXLOOP     LP3MOV      DX,      OFFSET        MAXMOV      AH,  09HINT       21HMOV      AH,  4CHINT       21HCODE     ENDSEND       BEGIN实验二 循环与子程序程序设计 一、实验目的 1) 加深对循环结构的理解。 2)掌握循环程序的设计方法。3)学习子程序的定义和调用方法。 4)掌握子程序、子程序的嵌套、递归子程序的结构。 5) 掌握子程序设计、编制及调试。 6) 熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。 二、实验内容 1) 编制程序计算S=1+2·3+3·4+4·5+N(N+1)+直到N(N+1)大于200为止,并将结果由屏幕上显示出来。2)将从3000H内存单元开始的100个字节存储单元全部清0。3)编制在屏幕上显示九九乘法表的程序。4)编制在屏幕上显示用*组成的三角形的程序。5)设有五个字数据存放在以BUF为首地址的内存单元中,要求采用调用多个字数据相加的子程序方法编程,和的低位字放在RESULT单元,和的高位字放在RESULT+2单元,并将结果显示在屏幕上。6)编写一个递归子程序,计算指数函数Xn的值,其中X,n从键盘输入。 三、实验设备 PC机一台四、实验步骤 1) 按程序流程图编制实验程序。 2) 输入源程序。 3) 汇编、连接程序,执行程序,检查结果。 4)对内存单元3000H开始的100个存储单元用E命令输入任意数。 5) 程序的执行可用DEBUG的G命令,也可用T命令单步跟踪执行。 6) 用D命令检查执行结果。 五、实验报告的要求 1) 列出源程序。2)对程序中用到的寄存器说明其功能。 3)总结计数控制循环程序的设计方法。 4) 说明怎样使用DEBUG进行程序调试的。调试过程中所遇到的问题是如何解决的。 、Exam1:DATA SEGMENTBUF DBS=1+2×3+3×4+4×5+N(N+1)+=,$RES DW 4 DUP(0),$DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS, AX MOV DX, OFFSET BUF MOV AH, 09H INT 21H MOV DX, 1 MOV BL, 2NEXT: MOV AL, BL INC BL MUL BL ADD DX, AX CMP AX, 200 JNA NEXT MOV CX, 0004H MOV DI, OFFSET RES ADD DI, 03HNEXT1:MOV AX, DX AND AX, 000FH CMP AL, 0AH JB NEXT2 ADD AL, 07NEXT2:ADD AL, 30H MOV DI,AL DEC DI PUSH CX MOV CL,04 SHR DX,CL POP CX LOOP NEXT1 MOV DX, OFFSET RES MOV AH, 09H INT 21H MOV AH, 4CH INT 21HCODE ENDSEND STARTExam3:DATA SEGMENT       ATAD  DB ?, 2AH, ?, 3DH, ?, ?, 20H, '$'       ATAD1 DB ?, 2AH, ?, 3DH, ?, ?, 0DH, 0AH, '$'DATA ENDS STACK SEGMENT STACK       DB 20H DUP(0)STACK ENDS CODE SEGMENT       ASSUME CS:CODE, DS:DATASTART:       MOV AX, DATA       MOV DS, AX       MOV CL, 09H       MOV BL, 00HOKL:       MOV AL, 00H       INC BLOK1:       INC AL       PUSH AX       CMP BL, AL       JZ OK       MOV BH, AL       MUL BL       MOV DI, OFFSET ATAD       CALL OKP       POP AX       JMP OK1OK:       MOV BH, AL       MUL BL       MOV DI, OFFSET ATAD1       CALL OKP       POP AX       LOOP OKL       MOV AH, 4CH       INT 21HOKP PROC        PUSH AX       PUSH BX       PUSH CX       ADD BX, 3030H       MOV DI, BH       MOV DI + 02H, BL       MOV CX, 0AH       MOV DH, 00HOKL2:       CMP AX, CX       JS OK2       ADD CX, 0AH       INC DH       JMP OKL2OK2:       SUB CX, 0AH       SUB AX, CX       MOV AH, DH       ADD AX, 3030H       MOV DI + 04H, AH       MOV DI + 05H, AL       MOV DX, DI       MOV AH, 09H       INT 21H       POP CX       POP BX       POP AX       RETOKP ENDPCODE ENDSEND STARTExam4:CODES SEGMENTASSUME CS:CODESSTART:        XOR BX,BX       MOV DL,2AH       MOV CX,9LOP:       PUSH CX       INC BL       MOV CL,BL       MOV DL,2AHLOP2:     MOV AH,02H       INT 21H       LOOP LOP2       POP CX        MOV DL,0AH       MOV AH,02H       INT 21H       MOV DL,0DH       MOV AH,02H       INT 21H       CMP BL,9       JZ ENDPRO       LOOP LOPENDPRO:       MOV AH,4CH       INT 21HCODES ENDSEND STARTExam5:STACK   SEGMENT   STACK          DB  1024  DUP(0)STACK   ENDSDATA    SEGMENTBUF     DW  0F101H,110DH,52H,100H,456HCOUNT  =($-BUF)/2RESULT  DW  4  DUP(?),'$'DATA    ENDSCODE    SEGMENT         ASSUME  CS:CODE,DS:DATA,SS:STACKWDADD   PROC  PUSH    DI  MOV     AX,  0  MOV     DX,  0  MOV     DI,  OFFSET  BUFNEXT2:  ADD     AX,  DI  JNC     NEXT1  INC     DXNEXT1:  ADD     DI,    2  LOOP    NEXT2  POP     DI  RET  WDADD   ENDP SHOW    PROC PUSH    CX PUSH    DI MOV     CX,    04H MOV     DI,    OFFSET  RESULT MOV     BX,    AX ADD     DI,    07HBBB:   MOV     AX,  BX AND     AX,   000FH CMP     AL,   0AH JB      QQQ ADD     AL,   07HQQQ:  ADD     AL,   30H MOV     DI,  AL DEC     DI PUSH    CX MOV     CL,   04 SHR     BX,    CL POP     CX LOOP    BBB MOV     CX,    0004HCCC:   MOV     AX,    DX AND     AX,   000FH CMP     AL,   0AH JB      DDD ADD     AL,   07HDDD:   ADD     AL,    30H MOV     DI,   AL DEC     DI PUSH    CX MOV     CL,    04H SHR     DX,   CL POP      CX LOOP     CCC POP      DI  POP      CX RET SHOW     ENDPBEGIN: MOV      AX,    DATA         MOV      DS,    AX MOV      CX,    COUNT CALL     WDADD CALL     SHOW MOV      DX,   OFFSET  RESULT MOV      AH,   09H INT      21H MOV      AH,   4CH INT      21HCODE    ENDS END      BEGIN 实验三 算术运算与代码转换程序设计一、实验目的 1)掌握算术运算程序的设计方法。2)掌握代码转换程序的设计方法。 3)进一步掌握各种程序结构。 4)熟练掌握和使用用DEBUG调试程序。 二、实验内容1)编制两个多字节整数加法和减法程序,并将结果按十六进制形式显示在屏幕上。2)编制程序实现二进制定点数与十进制数的ASCII码串之间转换,并将结果显示在屏幕上。3)编写程序计算从键盘输入两个不超过四位的十进制数的和、差、积、商,并以十进制形式输出。4)写程序把从键盘输入的四位十六进制数转换为压缩的BCD码,并显示输出。5)编写一通用过程用来将十进制数(从键盘输入)转换为P(从键盘输入)进制数。三、实验设备 PC机一台四、实验步骤 1) 按程序流程图编制实验程序。 2) 输入源程序。 3) 汇编、连接程序,执行程序,检查结果。 4) 程序的执行可用DEBUG的G命令,也可用T命令单步跟踪执行。 5) 用D命令检查执行结果。 五、实验报告的要求 1)列出源程序。2)对程序中用到的寄存器说明其功能。 3)总结算术运算和代码转换程序的设计方法。 4) 说明怎样使用DEBUG进行程序调试的。调试过程中所遇到的问题是如何解决的。 Eaxm1:DATA SEGMENTA DB 82H,34H,56H,78H,2AH,0BCH,0EFH,00HB DB 34H,56H,78H,9AH,0BCH,0EFH,16H LENB EQU $-BLEN2 EQU (B-A)*2RES DB LEN2 DUP('?'),'$'DATA ENDSSTACK SEGMENT PARA STACKDW 20 DUP (?)STACK ENDSCODE SEGMENTASSUME DS:DATA,CS:CODE,SS:STACKSTART:MOV AX,DATAMOV DS,AX;多字节相加MOV SI,0CLCMOV CX,LENBLOP1:MOV AL,ASIADC AL,BSIMOV ASI,ALINC SILOOP LOP1ADC BYTE PTR ASI,0;输出MOV SI,0ADD SI,LENBMOV DI,0MOV CX,LENB+1LOP2:PUSH CXMOV AL,ASI;高位转换MOV BL,ALMOV CL,4SHR BL,CLCMP BL,0AHJB NEXT1ADD BL,07HNEXT1:ADD BL,30HMOV RESDI,BLINC DI;低位转换MOV BL,ALAND BL,0FHCMP BL,0AHJB NEXT2ADD BL,07HNEXT2:ADD BL,30HMOV RESDI,BLINC DIDEC SIPOP CXLOOP LOP2MOV AH,09HMOV DX,OFFSET RESINT 21HMOV AH,4CHINT 21HCODE ENDS END STARTExam5:DATA SEGMENT STRING1 DB 'INPUT YOUR M=','$' STRING2 DB 'INPUT YOUR P=','$' RE DB 8 DUP(30H) DATA ENDS STACK1 SEGMENT STACK DW 60H DUP(0) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1 START:M

    注意事项

    本文(河北工业大学-汇编实验报告(共30页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开