实验二 算术运算类操作实验 (基础与设计)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二算术运算类操作实验 (基础与设计)
一、实验要求和目的
1、了解汇编语言中的二进制、十六进制、十进制、BCD 码的表示形式;
2、掌握各类运算类指令对各状态标志位的影响及测试方法;
3、熟悉汇编语言二进制多字节加减法基本指令的使用方法;
4、熟悉无符号数和有符号数乘法和除法指令的使用;
5、掌握符号位扩展指令的使用。
6、掌握BCD 码调整指令的使用方法
二、软硬件环境
1、硬件环境:计算机系统 windows;
2、软件环境:装有MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识
本实验主要进行算术运算程序设计和调试,涉及到的知识点包括:
1.加减法处理指令
主要有加法指令ADD,带进位加法ADC,减法指令SUB,带进位减法指令SBB。
2.乘除法指令和符号位扩展指令
主要有无符号数乘法指令MUL,带符号数乘法指令IMUL,无符号数除法指令DIV,带符号数除法指令IDIV,以及符号位从字节扩展到字的指令CBW 和从字扩展到双字的指令CWD。3.BCD 码的调整指令
主要有非压缩的BCD 码加法调整指令DAA,压缩的BCD 码减法调整指令DAS,非压缩的BCD 码加法调整指令AAA,非压缩的BCD 码减法调整指令AAS,乘法的非压缩BCD码调整指令AAM,除法的非压缩BCD 码调整指令AAD。
8088/8086 指令系统提供了实现加、减、乘、除运算的上述基本指令,可对下表所示的数据类型进行数据运算。
四、实验内容与步骤
1、对于两组无符号数,087H 和034H,0C2H 和5FH,试编程求这两组数的和差积商,并考虑计算结果对标志寄存器中状态标志位的影响。
设计流程:
源代码:
DATAS SEGMENT
ARRAY DW 087H,034H,0C2H,05FH
JIA DW 2 DUP(?) ;储存两组加法结果
JIAN DW 2 DUP(?) ;储存两组减法结果
CHENG DW 2 DUP(?) ;储存两组乘法结果CHU DW 2 DUP(?) ;储存两组除法结果DATAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV SI,0
MOV BX,0
SUB BX,2
SUB SI,4
L1:
ADD SI,4
ADD BX,2
MOV AX,ARRAY[SI] ;第一个运算数ADD AX,ARRAY[SI+2] ;加法运算
MOV JIA[BX],AX ;储存加法结果
MOV AX,ARRAY[SI]
SUB AX,ARRAY[SI+2] ;减法运算
MOV JIAN[BX],AX ;储存减法结果
MOV AX,ARRAY[SI]
MUL ARRAY[SI+2] ;乘法运算
MOV CHENG[BX],AX ;储存乘法结果MOV AX,ARRAY[SI]
MOV CX,ARRAY[SI+2]
DIV CL ;除法运算
MOV CHU[BX],AX ;储存除法结果CMP BX,2
JNZ L1
MOV AH,4CH
INT 21H
CODES ENDS
END START
程序结果:
通过-t逐步运行程序,逐步查看每次运算后标志位的状态,结果如下:
2、在数据段定义了两个多精度的有符号16 进制数,FIRST 和SECOND ,1)求两数的和与差,并将结果存放在THIRD 为首地址的缓冲区中;2)如果把两组数据当作十进制数据来处理,再次求两数的和与差,并将结果存放在FORTH 为首地址的缓冲区中。试编程实现上述运算。
FIRST DW 45 H,82H,96 H,57H
SECOND DW 12 H,46H,83 H,45H
思路流程:
以十六进制加法为例
源代码:
DATAS SEGMENT
FIRST DB 45H,82H,96H,57H
SECOND DB 12H,46H,83H,45H
THIRD DB 10 DUP(?)
FORTH DB 10 DUP(?)
DATAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS START:
MOV AX,DATAS
MOV DS,AX
;十六加法
MOV SI,3 ;运算数据的偏移量
MOV BX,3 ;储存数据结果的偏移量MOV CX,4 ;循环标志量
INC BX
INC SI
CLC ;标志位CF清零
L1:
DEC SI
DEC BX
MOV AL,FIRST[SI]
ADC AL,SECOND[SI]
MOV THIRD[BX],AL
LOOP L1
;十六减法
MOV SI,3
MOV BX,8
MOV CX,4
INC BX
INC SI
CLC
L2:
DEC SI
DEC BX
MOV AL,FIRST[SI]
SBB AL,SECOND[SI]
MOV THIRD[BX],AL
LOOP L2
;十加法
MOV SI,3
MOV BX,3
MOV CX,4