1、汇编实验第二次实验报告 本科实验报告实验名称: 实验二 算术运算类操作实验 (基础与设计) 课程名称:CPU与汇编实验时间:任课教师:实验地点:实验教师:实验类型: 原理验证 综合设计 自主创新学生姓名:学号/班级:组 号:学 院:同组搭档:专 业:成 绩:CPU与汇编实验二实验报告一、实验目的1、了解汇编语言中的二进制、十六进制、十进制、BCD码的表示形式;2、掌握各类运算类指令对各状态标志位的影响及测试方法;3、熟悉汇编语言二进制多字节加减法基本指令的使用方法;4、熟悉无符号数和有符号数乘法和除法指令的使用;5、掌握符号位扩展指令的使用。6、掌握BCD码调整指令的使用方法二、软硬件环境1、
2、硬件环境:计算机系统 windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。三、实验涉及的主要知识本实验主要进行算术运算程序设计和调试,涉及到的知识点包括:1加减法处理指令主要有加法指令ADD,带进位加法ADC,减法指令SUB,带进位减法指令SBB。2乘除法指令和符号位扩展指令主要有无符号数乘法指令MUL,带符号数乘法指令IMUL,无符号数除法指令DIV,带符号数除法指令IDIV,以及符号位从字节扩展到字的指令CBW和从字扩展到双字的指令CWD。3BCD码的调整指令主要有非压缩的BCD码加法调整指令DAA,压缩的BCD码减法调整指令DAS,非压缩的BCD码加法调整指令A
3、AA,非压缩的BCD码减法调整指令AAS,乘法的非压缩BCD码调整指令AAM,除法的非压缩BCD码调整指令AAD。四、实验内容与步骤1、对于两组无符号数,087H和034H,0C2H和5FH,试编程求这两组数的和差积商,并考虑计算结果对标志寄存器中状态标志位的影响。编程并运行结果如下表:对状态标志位的影响小结: CF为进位标志,运算过程中发生进位(超出AL表示范围)则为CY,否则为NC;AF为半进位标志,运算过程中某位发生进位,但结果没有超出AL表示范围,则为AC,否则为NA;ZF为中断标志,这里没有影响;OF为溢出标志,表示有符号运算时运算是否溢出,溢出为OV,否则为NV;SF为符号标志,当
4、看成符号数时,如果表示负数,则为NG,否则为PL;PF为奇偶标志,运算结果二进制中1的个数为奇数时为PO,偶数时为PE。程序代码如下:DATA SEGMENT DB 87H,34H,0C2H,5FH DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AL, DATA:0 MOV BL, DATA:1 ADD AL, BL MOV AL,DATA:0 MOV BL,DATA:1 SUB AL,BL MOV AL,DATA:0 MOV BL,DATA:1 MUL BL MOV AL,DATA:0
5、 MOV BL,DATA:1 DIV BL MOV AL,DATA:2 MOV BL,DATA:3 ADD AL,BL MOV AL,DATA:2 MOV BL,DATA:3 SUB AL,BL MOV AL,DATA:2 MOV BL,DATA:3 MUL BL MOV AL,DATA:2 MOV BL,DATA:3 DIV BL MOV AH,4CH INT 21HCODE ENDSEND START2、在数据段定义了两个多精度的有符号16进制数,FIRST和SECOND ,1)求两数的和与差,并将结果存放在THIRD为首地址的缓冲区中;2)如果把两组数据当作十进制数据来处理,再次求两数的
6、和与差,并将结果存放在FORTH为首地址的缓冲区中。试编程实现上述运算。FIRST DB 45 H,82H,96 H,57HSECOND DB 12 H,46H,83 H,45H编程计算得到结果如下表:程序代码如下:16进制代码:data segment first db 45H, 82H, 96H, 57H second db 12H, 46H, 83H, 45H third db 4 dup(?) forth db 4 dup(?) data endscode segmentassume cs:code, ds:datastart: mov ax, data mov ds, ax mov
7、si, 3l1: lea di, first add di, si mov al, di lea di, second add di, si mov bl, di adc al, bl lea di, third add di, si mov di, al dec si cmp si, -1jne l1 mov si, 3l2: lea di, first add di, si mov al, di lea di, second add di, si mov bl, di sbb al, bl lea di, forth add di, si mov di, al dec si cmp si,
8、 -1jne l2code endsend start10进制代码:data segment first db 45H, 82H, 96H, 57H second db 12H, 46H, 83H, 45H third db 4 dup(?) forth db 4 dup(?) data endscode segment assume cs:code, ds:datastart: mov ax, data mov ds, ax mov si, 3l1: lea di, first add di, si mov al, di lea di, second add di, si mov bl, d
9、i adc al, bl daa lea di, third add di, si mov di, al dec si cmp si, -1 jne l1 mov si, 3l2: lea di, first add di, si mov al, di lea di, second add di, si mov bl, di sbb al, bl das lea di, forth add di, si mov di, al dec si cmp si, -1 jne l2code endsend start3、编程计算((Z +X*Y -328) -V)/ Y,其中X、Y、Z、V均为16位带
10、符号数,假设初始数据分别装入X、Y、Z、V单元,要求上式计算结果的商存入AX,余数存入DX寄存器。同学自行给出初始值加以验证程序。首先实验中任选一组数据进行测试,选取的数据为X=0234H Y=09ABH Z=0ABCH V=0178H程序代码如下所示:data segment x dw 0234H y dw 09ABH z dw 0ABCH v dw 0178Hdata endscode segment assume ds:data, cs:codestart: mov ax, data mov ds, ax lea si, x mov ax, si lea si, y mov bx, si imul bx lea si, z mov bx, si add ax, bx add dx, 0 sbb ax, 328 sbb dx, 0 lea si, v mov bx, si sbb ax, bx sbb dx, 0 lea si, y mov bx, si idiv bxcode endsend start运行结果如下:结果 商AX=0234H 余数DX=07FCH经验算,结果正确。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1