3.乘法调整 格式:AAM 操作:将AL中的积调整为BCD→AX 调整原则:AL10→商→AH←即十位 →余数→AL←即个位 两位非压缩型BCD数的max=9*9=81,对于AL中小 于100=64H的二进制数都能调整为BCD,且与标志无关, 不一定紧跟MUL指令使用。 例.9*8=72→AX MO∨AL,9 MoV bl 8 MUL BL AX=0048H AAM AX=0702BCD
3. 乘法调整 格式:AAM 操作:将AL中的积调整为BCD→AX 调整原则:AL/10 →商→AH ←即十位 →余数→AL←即个位 • ∵两位非压缩型BCD数的max=9*9=81,∴对于AL中小 于100=64H的二进制数都能调整为BCD,且与标志无关, 不一定紧跟MUL指令使用。 例. 9*8=72→AX MOV AL , 9 MOV BL , 8 MUL BL ;AX=0048H AAM ; AX=0702BCD
例。 MOV AX,OFFH AAM MOV CL AL MOV AL AH AAM AH: AL: CL=020505BCD AAM即等效于÷10,凡是将字节数变换成BCD数均可用 此指令来实现 除法调整 格式:AAD 操作:将AX中的BCD数变换成二进制数→AL 调整原则:AH*10+AL→AL,0→AH ●此指令实际上是对被除数进行预调整,即将两位非压缩 BCD数变换成二进制形式集中在AL中
例. MOV AX , 0FFH AAM MOV CL , AL MOV AL , AH AAM ; AH:AL:CL=020505BCD • AAM即等效于÷10,凡是将字节数变换成BCD数均可用 此指令来实现. 4. 除法调整 格式: AAD 操作:将AX中的BCD数变换成二进制数→AL 调整原则:AH*10+AL→AL , 0→AH • 此指令实际上是对被除数进行预调整,即将两位非压缩 BCD数变换成二进制形式集中在AL中
例.77÷3=25.2 BCDW DW 0707H BCDB Db 03H R DB Q DW MOV AX BCDW AⅩ=0707H AAD AX=004DH DIV BCDB AX=0219H MOVR AH ;存余数 AAl AX=0205H MOv Q AX 存商
例. 77÷3=25…2 BCDW DW 0707H BCDB DB 03H R DB ? Q DW ? MOV AX , BCDW ; AX=0707H AAD ; AX=004DH DIV BCDB ; AX=0219H MOV R , AH ;存余数 AAM ; AX=0205H MOV Q , AX ;存商
四顺序程序设计举例 例1。非压缩型BcD乘法运算,如:29*9=261,并显示 结果。参见P、82例3、3 算法:29 火9 81 +18 261 DW 0209H B DB 9 DB 3 DUP(?) DB 3 DUP(?), S
四. 顺序程序设计举例 例1. 非压缩型BCD乘法运算,如: 29*9=261,并显示 结果。参见P、82 例3、3 算法: 29 * 9 81 +18 261 W DW 0209H B DB 9 JJ DB 3 DUP(?) JJS DB 3 DUP(?),’$ ’
MOV AL BYTE PTR W MUL B 十位→AH→JJ+1 AAM 9k9 个位→AL→J MOV JJ AL MOV JJ+1 AH MOV AL BYTE PTR W+1 百位→AH MUL B 2大9 AAM 十位→AL ADD ALJJ+1 十位合并,调整时的进 AAA 位自动加在AH中 MO刀+1,AL;存十位数 MOV刀+2,AH;存百位数
MOV AL , BYTE PTR W MUL B AAM MOV JJ , AL MOV JJ+1 , AH MOV AL , BYTE PTR W+1 MUL B AAM ADD AL , JJ+1 AAA MOV JJ+1,AL ;存十位数 MOV JJ+2,AH ;存百位数 十位→AH→JJ+1 9*9 个位→AL→JJ 百位→AH 2*9 十位→AL 十位合并,调整时的进 位自动加在AH中