北理工_汇编_实验二_算术运算类操作实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本科实验报告
实验名称:实验二算术运算类操作实验(基础与设计)
课程名称:CPU与汇编实验实验时间:
任课教师:实验地点:
实验教师:
实验类型:□原理验证■综合设计□自主创新
学生姓名:
学号/班级:组号:无学院:信息与电子同组搭档:无专业:信息工程成绩:
一、实验要求和目的
1.了解汇编语言中的二进制、十六进制、十进制、BCD 码的表示形式;
2.掌握各类运算类指令对各状态标志位的影响及测试方法;
3.熟悉汇编语言二进制多字节加减法基本指令的使用方法;
4.熟悉无符号数和有符号数乘法和除法指令的使用;
5.掌握符号位扩展指令的使用;
6.掌握BCD 码调整指令的使用方法。
二、软硬件环境
1、硬件环境:计算机系统 windows;
2、软件环境:装有MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识
1.加减法处理指令
2.乘除法指令和符号位扩展指令
3.BCD 码的调整指令
四、实验内容
(一)对于两组无符号数,087H 和034H,0C2H 和5FH,试编程求这两组数的和差积商,并考虑计算结果对标志寄存器中状态标志位的影响:
1.流程图Array
2.程序代码:
DA TAS SEGMENT
DA TAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DA TAS,SS:STACKS START:
MOV AX,DATAS
MOV DS,AX
MOV AX,0C2H
MOV BX,5FH
ADD AX,BX ;add
MOV AX,0C2H
MOV BX,5FH
SUB AX,BX ;sub
MOV AX,0C2H
MOV BX,5FH
MUL BX ;mul
MOV AX,0C2H
MOV BX,5FH
DIV BX ;div
MOV AH,4CH
INT 21H
CODES ENDS
END START
(将数据改变得到另一组输出结果)
3.实验结果
以第一组数的加法为例
(已将截图以上输入-t进行debug的步骤省略)
此时右下角信息(NV UP……)代表标志寄存器的值。
4.结果分析:
由资料可得:
1.CF(carry flag):进位标志位,运算结果需要进位为1,不需进位为0
2.PF(parity flag):奇偶标志位,当运算结果的低8位中的“1”的个数为偶数时PF=1,为奇数时,PF=0。
3.AF(auxiliary flag):辅助进位标志,第3位有进位为1,无进位为0
4.ZF(zero flag):零标志位,当运算结果为零时ZF=1,否则ZF=0。
5.SF(sign flag):符号标志位,当运算结果的最高位为1时SF=1,否则SF=0。
6.OF(overflow flag):溢出标志位,当算术运算结果超出了带符号数的范围,即溢出时,OF=1,否则OF=0.
其中注意在本程序中,SUB影响全部的条件标志:
1.减法的CF反应的是无符号数运算中的借位情况:当减数>被减数是CF=1,否则CF=0;
2.OF:如果两个数的符号相反而结果的符号与减数相同,则OF=1,否则OF=0;
3.SF(运算结果<0为1否则为0)、ZF(零标志)、AF(辅助进位标志)、PF(奇偶标志)根据其含义设置。
(二)在数据段定义了两个多精度的有符号16 进制数,FIRST 和SECOND ,1)求两数的和与差,并将结果存放在THIRD 为首地址的缓冲区中;2)如果把两组数据当作十进制数据来处理,再次求两数的和与差,并将结果存放在FORTH 为首地址的缓冲区中。试编程实现上述运算。
FIRST DW 45H,82H,96H,57H
1.流程图
十六进制减法及十进制显示部分略。
十进制加法前设置寄存器值为SI=0,DI=0,CX=3,在每步相加后用DAA显示为十进制数,十进制加法前设置寄存器值为SI=0,DI=5,CX=3,在每步相减后用DAS显示为十进制数。
2.程序代码:
DA TAS SEGMENT
FIRST DB 45H,82H,96H,57H
SECOND DB 12H,46H,83H,45H
THIRD DB 10 DUP(?) ;注意保证数组空间足够大
FORTH DB 10 DUP(?)
DA TAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DA TAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV SI,0
MOV DI,0
MOV CX,3 ;设置寄存器值,作为计数器
L1: ;十六进制显示加法
MOV AL,FIRST[SI+3]
MOV BL,AL
MOV AL,SECOND[SI+3]
ADC AL,BL
MOV THIRD[DI+4],AL
DEC SI
DEC DI
DEC CX
JNZ L1 ;若CX不为零,则未到最高位,循环
DEC DI ;CX为零,跳出循环
MOV AL,FIRST[SI+3]
CBW ;扩充,符号位存入AH
MOV BX,AX
MOV AL,SECOND[SI+3]
CBW
ADC AX,BX
MOV WORD PTR THIRD[DI+4],AX ;将AX强制显示。即高位存入下一位。
MOV DI,5 ;重置寄存器值,避开加法结果位置。
MOV SI,0
MOV CX,3
L2: ;十六进制显示减法
MOV AL,FIRST[SI+3]
MOV BL,SECOND[SI+3]
SBB AL,BL