汇编学习笔记39
2011-01-10 19:42
183 查看
三、十进制数算术运算调整指令
8086,8088中使用BCD码表示十进制数
BCD码可分为压缩的BCD码和非压缩的BCD码。(组合BCD码和非组合BCD码)。
压缩的BCD码一个字节含两位BCD码,
非压缩的BCD码一个字节也含两位BCD码,但高4位的BCD码无意义,不使用。
1.组合BCD码加法调整指令: DAA
格式: DAA
操作: 对AL中的和进行调整,调整如下:
1) 如果低四位在A~F之间,或AF标志位为1,则(AL) <—(AL+06H), AF标志位置为1
2) 如果高四位在A~F之间,或CF标志位为1,则(AL) <—(AL+60H), CF标志位置为1
该指令影响标志位为AF, CF, PF, ZF,不影响其他标志位
例:
MOV AL, 34H ; AL=34H
ADD AL, 47H ; AL=7BH, AF=0, CF=0
DAA ; AL=81H, AF=1, CF=0
ADC AL, 87H ; AL=08H, AF=0, CF=1
DAA ; AL=68H, AF=0, CF=1
ADC AL, 79H ; AL=E2H, AF=1, CF=0
DAA ; AL=48H, AF=1, CF=1
例:
(BCD3)<—(BCD1)+(BCD2)
(BCD1)=34H, (BCD1+1)=18H, (BCD2)=89H, (BCD2+1)=27H
指令:
MOV AL, BCD1
ADD AL, BCD2
DAA
MOV BCD3, AL
MOV AL, BCD1+1
ADC AL, BCD2+1
DAA
MOV BCD3+1, AL
2.压缩BCD码减法调整指令DAS
本指令对AL中的差进行调整,调整如下:
1) 如果AL低4位在A~F之间或AF=1,则(AL)=(AL)-06H
2) 如果AL高4位在A~F之间或CF=1,则(AL)=(AL)-60H
标志位影响与DAA相同
例:
MOV AL, 45H ; AL=45H
SUB AL, 27H ; AL=1EH, AF=1, CF=0
DAS ; AL=18H, AF=1, CF=0
SBB AL, 49H ; AL=CFH, AF=1, CF=1
DAS ; AL=69H, AF=1, CF=1
例:
(BCD1)=1234, (BCD2)=4612
完成(BCD3)=(BCD1)-(BCD2)
指令:
MOV AL, BCD1
SUB AL, BCD2
DAS
MOV BCD3, AL
MOV AL, BCD1+1
SBB AL, BCD2+1
DAS
MOV BCD3+1, AL
8086,8088中使用BCD码表示十进制数
BCD码可分为压缩的BCD码和非压缩的BCD码。(组合BCD码和非组合BCD码)。
压缩的BCD码一个字节含两位BCD码,
非压缩的BCD码一个字节也含两位BCD码,但高4位的BCD码无意义,不使用。
1.组合BCD码加法调整指令: DAA
格式: DAA
操作: 对AL中的和进行调整,调整如下:
1) 如果低四位在A~F之间,或AF标志位为1,则(AL) <—(AL+06H), AF标志位置为1
2) 如果高四位在A~F之间,或CF标志位为1,则(AL) <—(AL+60H), CF标志位置为1
该指令影响标志位为AF, CF, PF, ZF,不影响其他标志位
例:
MOV AL, 34H ; AL=34H
ADD AL, 47H ; AL=7BH, AF=0, CF=0
DAA ; AL=81H, AF=1, CF=0
ADC AL, 87H ; AL=08H, AF=0, CF=1
DAA ; AL=68H, AF=0, CF=1
ADC AL, 79H ; AL=E2H, AF=1, CF=0
DAA ; AL=48H, AF=1, CF=1
例:
(BCD3)<—(BCD1)+(BCD2)
(BCD1)=34H, (BCD1+1)=18H, (BCD2)=89H, (BCD2+1)=27H
指令:
MOV AL, BCD1
ADD AL, BCD2
DAA
MOV BCD3, AL
MOV AL, BCD1+1
ADC AL, BCD2+1
DAA
MOV BCD3+1, AL
2.压缩BCD码减法调整指令DAS
本指令对AL中的差进行调整,调整如下:
1) 如果AL低4位在A~F之间或AF=1,则(AL)=(AL)-06H
2) 如果AL高4位在A~F之间或CF=1,则(AL)=(AL)-60H
标志位影响与DAA相同
例:
MOV AL, 45H ; AL=45H
SUB AL, 27H ; AL=1EH, AF=1, CF=0
DAS ; AL=18H, AF=1, CF=0
SBB AL, 49H ; AL=CFH, AF=1, CF=1
DAS ; AL=69H, AF=1, CF=1
例:
(BCD1)=1234, (BCD2)=4612
完成(BCD3)=(BCD1)-(BCD2)
指令:
MOV AL, BCD1
SUB AL, BCD2
DAS
MOV BCD3, AL
MOV AL, BCD1+1
SBB AL, BCD2+1
DAS
MOV BCD3+1, AL
相关文章推荐
- 32位汇编语言学习笔记(39)--显示环境变量
- 39、我的C#学习笔记5
- [汇编语言学习笔记][第七章更灵活的定位内存的方法]
- 【点击模型学习笔记】Ad centric model discovery for redicting ads' click through rate_ANT2013_Tencent
- 39.Oracle深度学习笔记——自动创建ASM UDEV设备脚本
- iOS学习笔记39-ReactiveCocoa入门
- 32位汇编语言学习笔记(11)--条件传送指令
- IOS学习笔记39--NSString各种语法的使用
- 王爽汇编语言学习笔记(五)--loop与[bx]
- 汇编语言学习笔记:寄存器(1)
- 汇编入门学习笔记 (三) —— 第一个程序
- 汇编学习笔记---2.2物理地址计算
- 汇编语言学习笔记-创建最基本的windows窗体
- 汇编--学习笔记(七)-数据传送指令
- 汇编--学习笔记(八)-字符输入、输出(1号、2号、循环)
- 32位汇编语言学习笔记(35)--显示ASCII表
- [外挂学习]Jim's游戏外挂学习笔记1——动态分配内存的游戏怎么样找内存地址
- 汇编学习笔记--查看CPU和内存
- Jim's游戏外挂学习笔记3——继续找当前地图数据和所处坐标存放的地址
- 32位汇编语言学习笔记(37)--显示命令行参数