汇编学习笔记40

二、未组合BCD码算术运算调整指令

1.未组合BCD码的加法指令调整指令: AAA

指令格式: AAA

本指令对在AL中的由两个未组合BCD码相加后的结果进行调整,产生一个未组合BCD码

调整方法如下:

1) 如果AL中低4位在0~9之间,且AF=0,转入3)

2) 如果AL的低4位在A~F之间,或AF=1,则(AL)=(AL)+6, (AH)=(AH)+1, AF=1

3) 清除AL的高4位

4) AF的值送入CF

该指令影响标志位AF和CF,对其他标志位无定义。

例:

MOV AX, 7

ADD AL, 6   ; AL=0DH, AH=00H, AF=0, CF=0

AAA         ; AL=03H, AH=01H, AF=1, CF=1

ADC AL, 5   ; AL=09H, AH=01H, AF=0, CF=0

AAA         ; AL=09H, AH=01H, AF=0, CF=0

ADD AL, 39H ; AL=42H, AH=01H, AF=1, CF=0

AAA         ; AL=08H, AH=02H, AF=1, CF=1

2. 未组合BCD码的减法指令调整指令 AAS

指令格式: AAS

本指令对在AL中的两个未组合BCD码相减所得的差进行调整,产生一个未组合BCD码

调整方法如下:

1) 如果AL中的低4位在0~9之间,且AF=0,则转入3)

2) 如果AL中的低4位在A~F之间或AF=0,则 (AL)=(AL)-6, (AH)=(AH)-1, AF=1

3) 清除AL的高4位

4) AF的值送入CF

该指令影响标志位AF和CF,对其他标志位无定义

例:

MOV AL, 34H

SUB AL, 09H   ; AL=2BH, AF=1, CF=0

AAS           ; AL=05H, AF=1, CF=1

3. 未组合BCD码乘法指令调整指令  AAM

指令格式: AAM

本指令对存放在AL中的积(由两个未组合BCD码相乘产生)进行调整,产生两个未组合的BCD码。

调整方法如下:

把AL中的值除以10, 商放在AH中,余数放在AL中。

该指令影响标志位SF, ZF, PF, 对其他标志位无影响。

MOV AL, 03H

MOV BL, 04H

MUL BL         ; AL=0CH, AH=00H

AAM            ; AL=02H, AH=01H

4. 未组合BCD码除法指令调整指令 AAD

指令格式: AAD

本指令与其他调整指令在使用顺序上不同。本指令在调用除运算指令之前调用。把存放在AH和AL中的两位未组合BCD码调整为一个二进制数存放在AL中。

调整方法为:

(AL)=(AL)+10*(AH), (AH)=0

由于上述调整,存放在AL和AH中的非组合BCD码的高4位应为0,该指令影响标志位SF, ZF, PF, 对其他标志位无影响

例:

MOV AH, 04H

MOV AL, 03H

MOV BL, 08H

AAD           ; AL=2BH, AH=00H

DIV BL        ; AL=05H, AH=03H

例: 写出(DX)=UP1+UP2-UP3

MOV AX, 0

MOV AL, UP1

ADD AL, UP2

AAA

MOV DL, AL

MOV AL, UP1+1

ADC AL, UP2+1

AAA

XCHG AL, DL

SUB AL, UP3

AAS

XCHG AL, DL

SBB AL, UP3+1

AAS

MOV DH, AL

转载于:https://www.cnblogs.com/hailong/archive/2011/01/12/1934002.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
嗨!对于逆向学习汇编语言的学习笔记,我可以给你一些基本的指导。首先,汇编语言是一种低级语言,它与计算机的底层硬件密切相关。逆向工程则是通过分析和理解已编译的程序来获取程序的内部信息。 以下是一些学习汇编语言和逆向工程的建议: 1. 学习基础知识:了解计算机体系结构、寄存器、内存和指令集等基础概念是必要的。可以先阅读相关的书籍或在线教程,掌握这些基本概念。 2. 掌握汇编语言的语法和指令集:每种计算机体系结构都有自己的汇编语言语法和指令集。选择一种你感兴趣的体系结构(如x86、ARM等),并学习它的汇编语言。 3. 练习编写和调试汇编代码:通过编写简单的汇编代码来熟悉语法和指令集。使用调试器来单步执行代码并观察寄存器和内存的变化。 4. 分析已编译程序:选择一个目标程序进行逆向分析。使用反汇编器将程序转换为汇编代码,并分析代码的逻辑和功能。这有助于理解程序的结构和运行过程。 5. 使用调试器进行动态分析:通过调试器来动态地执行程序,并观察程序在运行时的行为。使用断点、内存查看器和寄存器查看器等工具来分析程序的状态和数据。 6. 学习逆向工程工具和技术:了解常用的逆向工程工具和技术,如IDA Pro、OllyDbg、Ghidra等。掌握这些工具的使用可以提高你的逆向分析能力。 7. 参考优秀资源:阅读与逆向工程和汇编语言相关的书籍、论文和博客,关注相关的社区和论坛。与其他逆向工程师交流经验也是很有帮助的。 记住,逆向工程是一个需要耐心和实践的过程。持续学习和实践将帮助你提高逆向分析的技能。祝你在学习汇编语言和逆向工程的过程中取得好成果!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值