文档介绍:实验二 算术运算实验
一、实验目的
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、
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,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,1