一、 实验目的
a) 熟悉、掌握非 BCD 码乘除的十进制调整指令
b) 掌握非 BCD 码乘除数据在数据段的定义方式
c) 实现非 BCD 码的乘除及其混合运算
二、 实验重难点
a) 重点:在进行非 BCD 码的乘除法时需要用到十进制调整指令,
须了解、掌握该指令的格式及功能。非 BCD 码乘除时,数据
的定义须注意。
- AAM 指令
指令格式:
AAM ;把 AL 中的积调整为非 BCD 码格式送到 AX 中 2. AAD 指令
指令格式:
AAD ;(al)<—10*(ah)+(al),(ah)<—0,进行 DIV 之前调整 - 数据的定义
如定义 A=8 和 B=56:
A db 08h或A db 00001000B
B db 06h,05h ;中间需用逗号隔开,低位在前高位在后 b)难点:虽然各条调整指令都是无目操作,但都隐含在 AL 中进 行调整,所以在调整前先得把数据放进 AL 中。在进行非 BCD 码 乘除时,其内存状况很重要,特别是进行两位数的非 BCD 码乘法,
需要进行加法运算。有时还需进行字与字节之间的转换。 1.内存示意图
例 3456
2.字与字节之间的转换 Mov al,A
Mul B
AAM
Mov word ptr C0,ax ;字节转换成字 三、 程序代码
a) 实现 89
DATA SEGMENT
BCD1 DB 00001000B
BCD2 DB 00001001B
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START:MOV AX, DATA
MOV DS, AX MOV AL, BCD1 MUL BCD2 AAM
MOV AH, 4CH
INT 21H
CODE ENDS
END START
四、 实验结果
b) 在上个实验的基础上完成 72/5,商存在寄存器 C 中,余存在 寄存器R中。
在数据段添加
BCD3 DB 05H
C DB 2DUP(?) R DB 2DUP(?) 代码段添加
MOV BX,AX
MOV AH,0
MOV AL,BH
AAD
DIV BCD3
MOV C+1,AL
MOV AL,BL
AAD
DIV BCD3
MOV C,AL
MOV R,AH