实验二算术运算实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二算术运算实验
一、实验目的
1、掌握MASM for Windows 环境下的汇编语言编程环境使用;
2、掌握汇编语言程序设计的基本流程及汇编语言中的二进制、十六进制、十进制、BCD
码的表示形式;
3、掌握汇编语言对多精度十六进制和十进制的编程方法及运算类指令对各状态标志
位的影响及测试方法;
4、掌握无符号数和有符号数运算区别及编程方法;
5、掌握BCD 码调整指令的使用方法
二、软硬件实验环境
1、硬件环境:惠普64 位一体化计算机及局域网;
2、软件环境:windows 8,红蜘蛛管理系统,MASM for Windows。
三、实验基本原理
算术运算实验需要对运行结果进行调试及查看状态字,其相关知识如下。
1) 标志位
在debug调试过程中,标志位用特殊符号表示的,其标志名和状态符号的对照表参照表1所示。
表1标志名和状态符号的对照表参照表
2) 加减法指令
ADD表示加法指令,ADC表示带进位加法指令,SUB表示减法指令,SBB表示带进位减法指令。
3) 乘除法指令
MUL表示无符号数乘法指令,IMUL表示带符号数乘法指令,DIV表示无符号数除法指令,IDIV表示带符号数除法指令。
4) 符号位扩展指令
CBW表示从字节扩展到字的指令,CWD表示从字扩展到双字的指令。
5) BCD码的调整指令
在进行十进制加减运算时,需要将数据用BCD码表示,还要考虑到是组合BCD码还是非组合BCD码,组合BCD码是用一个字节表示两位十进制数,非组合BCD码是用一个字节表示一位十进制数,对于组合的BCD码加减法运算其结果存放在AL中。
组合的BCD码加法调整指令DAA;
组合的BCD码减法调整指令DAS;
非组合的BCD码加法调整指令AAA;
非组合的BCD码减法调整指令AAS;
乘法的非组合BCD码调整指令AAM;
除法的非组合BCD码调整指令AAD。
8088/8086指令系统提供了实现加、减、乘、除运算指令,可参照表2所示容。
表2数据类型的数据运算表
四、实验步骤与容
1) 对于表格中三组无符号数,试编程求这三组数的指定运算结果,并考虑计算结果对标志寄存器中状态标志位的影响:
①实验分析
本实验要求简单,仅对指定三组数进行基本运算。只需使用ADD、SUB、MUL、DIV四个运算命令,并以MOV命令作为数值转移的手段即可。运算结果和状态标志的情况可以通过debug调试中的T命令进行逐步查看。
需要注意的主要有以下几点:
1.在进行加法和乘法运算时,会出现对高位的进位扩展。因此,在记录结
果的时候不能仅仅记录低2位(十六进制)的结果,应记录包含高位的
完整结果;
2.在使用MUL和DIV命令时,语句的写法与ADD和SUB有区别;
3.除法运算既可得到商,也可得到余数,余数存在DL中;
4.查看结果时以三个语句为一次运算,输入三个T命令后的结果才是此次
运算的结果。
②流程图
③程序样例
1、
DA TAS SEGMENT
;此处输入数据段代码
BUF1 DB 0ABH,64H,0A2H
BUF2 DB 78H,5AH,3FH
BUF3 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 CX,2
Q1:
MOV AH,0H
MOV AL,BUF1[SI]
MOV BL,AL
MOV AL,BUF2[SI]
ADD AX,BX ;进行运算
MOV BUF3[SI],AL
ADD SI,1H
DEC CX
JNZ Q1 ;跳转再做一次第二组数的加法运算
MOV AX,4CH
INT 21H
CODES ENDS
END START
2、
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 CX,2
Q1:
MOV AH,0H
MOV AL,BUF2[SI]
MOV BL,AL
MOV AL,BUF1[SI]
SUB AX,BX
MOV BUF3[SI],AL
ADD SI,1H ;do the operation
DEC CX
JNZ Q1 ;do it again with the second group of numbers
MOV AX,4CH
INT 21H
CODES ENDS
END START
3、DATAS SEGMENT
;此处输入数据段代码
BUF1 DB 0ABH,64H,0A2H
BUF2 DB 78H,5AH,3FH
BUF3 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,2
MOV CX,1
Q1:
MOV AH,0H
MOV AL,BUF2[SI]
MOV BL,AL
MOV AL,BUF1[SI]
DIV BX
MOV BUF3[SI],AL
ADD SI,1H ;do the operation
DEC CX
JNZ Q1 ;do it again with the second group of numbers MOV AX,4CH
INT 21H
CODES ENDS
END START
④实验结果
0ABH+78H
64H+5AH