aaa指令本质上是将相加后的结果拆成两个部分(拆成非压缩BCD码的形式)
下面进行举例介绍
1. ah = 0,al = 06h,bl = 09h,执行指令add al,bl得ah = 01h,al = 05h,aaa的作用就是将相加后al中的结果15拆分成两部分
(将0fh十进制为15的数字拆分成一个1和一个5,1放在ax的高位ah中,5放在ax的低位al中)
2. 看下面的汇编代码段

mov      ah,0                ;ax = 0038h
mov     al,'8'                ;'8'的ascii码值十进制为56,十六进制为0038h,所以ax = 0038h
add     al,'2'                ;'2'的ascii码值十进制为50,十六进制为0032h,所以ax = 0032h,相加后结果为006Ah
aaa                         ;执行aaa指令后ax = 0100h,本质上是将al低位的a进行化简,a的值为10,转化为BCD码值为01 00h
or          ax,3030h        ;相当于or      ah,30h与or   al,30h操作
将高位的ah与低位的al分别进行ascii码值的转换

最终输出的值为"10",相当于将’8’与’2’进行加法运算,‘8’+‘2’ = “10”
具体算法
(1)如果al的低4位是在0到9之间,保留低4位,清除高4位,如果al的低4位在10到15之间,则通过加6,来使得低4位在0到9之间,然后再对高4位清零。
(2)如果al的低4位是在0到9之间,ah值不变,CF和AF标志清零,否则,ah=ah+1,并设置CF和AF标志。

aas指令与aaa指令类似
AAS 减法的ASCII调整指令(ASCII Adjust for Subtraction)
若AL寄存器的低4位>9或AF=1,则:
(1)AL=AL-6,AF置1;
(2)将AL寄存器高4位清零;
(3)AH=AH-1,CF置1。
否则,不需要调整。
如下面的汇编指令
.data
val1 BYTE ‘8’
val2 BYTE ‘9’
.code
mov ah, 0
mov al,val1 ; AX = 0038h
sub al,val2 ; AX = 00FFh
aas ; AX = FF09h
pushf ; 保存进位标志位
or al,30h ; AX = FF39h
popf ; 恢复进位标志位
算出ax = 00ffh之后,看末尾的f,
f超过值9,将f-6后值为09放入末尾的al之中
因为f减去了值6,所以打头的00需要减1
00-1=ffh,最终结果为ax = ff09h

汇编语言aaa指令解析,aas指令解析相关推荐

  1. Uboot中start.S源码的指令级的详尽解析 在线版

    http://bbs.chinaunix.net/thread-2312785-1-1.html 以后所有内容更新,都放在这里: Uboot中start.S源码的指令级的详尽解析 在线版 Uboot ...

  2. Uboot中start.S源码的指令级的详尽解析

    Uboot中start.S源码的指令级的详尽解析 版本:v1.9 Crifan Li 摘要 本文对Uboot中的Start.S的源码的几乎每一行,都进行了详细的解析 本文提供多种格式供: 在线阅读 H ...

  3. Uboot中start.S源码的指令级的详尽解析【转】

    本文转载自:http://www.crifan.com/files/doc/docbook/uboot_starts_analysis/release/html/uboot_starts_analys ...

  4. Vue_双向绑定解析以及指令介绍

    Vue Vue双向绑定解析 为什么Vue可以实现双向绑定? 控制台输入定义好的Vue实例 这里会有get/set方法,在es5之后,可以给变量添加get/set方法,就类似于Java中的get/set ...

  5. Uboot中start.S源码的指令级的详尽解析(转)

    Uboot中start.S源码的指令级的详尽解析 转载于:https://www.cnblogs.com/LittleTiger/p/10877516.html

  6. (一) Marlin-2.1.x 源码解析:G-Code指令的接收、解析与执行

    源码文件 涉及源代码文件 Marlin/src/MarlinCore.h /.cpp Marlin/src/gcode/gcode.h /.cpp Marlin/src/gcode/parser.h ...

  7. Android逆向之旅--「最右」签名算法解析(ARM指令学习恶心篇)

    一.前言 今天开始我们后续会开展三篇左右的arm指令学习,因为之前一直都有同学和我说有没有详细的arm指令分析,这个之前的确一直没有好的样本,有的人可能说可以用自己写的C代码然后反编译so来学习,那样 ...

  8. 最右android工资,Android逆向之旅—最右App的签名算法解析(ARM指令学习不舍篇)

    一.逆向分析 本文继续来看最后一篇介绍ARM指令学习,之前的两篇文章已经详细介绍了ARM指令的基础知识,本文继续把剩下来的所有都介绍完了,首先一定要去看前面的基础篇和进阶篇,不然我都很难保证你看这篇文 ...

  9. 8086汇编语言寻址方式、基本指令和调试指令

    一.80x86/Pentium 各种寻址方式 1.立即寻址 立即寻址方式下,操作数作为立即数直接包含在指令中,紧跟在操作码之后与其一起 存放在代码段区域.因此,立即数总是和操作码一起被存入 CPU 的 ...

  10. 汇编语言笔记10-CALL和RET指令

    ☞模块化程序设计 模块化程序设计 汇编语言通过call和ret指令实现了模块化程序设计.可以实现多个相互联系.功能独立的子程序来解决一个复杂的问题. 子程序的框架 1 assume cs:code 2 ...

最新文章

  1. Google母公司5600万美元首投AI芯片初创公司,看上了SambaNova的什么?
  2. Active report-在Web 上使用 active report
  3. 鸟哥的Linux私房菜-第10/11/12/13章(vim程序编辑器、学习bash、正则表达式与文件格式化处理、学习Shell Scripts)...
  4. linux cat EOF使用示例
  5. .13-Vue源码之patch(3)(终于完事)
  6. jq匹配偶数行_jquery怎么实现奇偶行不同背景颜色?
  7. 关于jQuery引用版本问题
  8. python打包安卓的方法_打包发布Python模块的方法详解
  9. 浏览器乱码问题的具体解决
  10. JavaScript编写的《人生不纠结模拟器》
  11. 密码生成 算法编程题
  12. 彻底卸载Android Studio
  13. 梅宏院士:大数据技术的四大挑战与十大趋势
  14. 腾讯IM实战:低代码超快实现即时通讯录
  15. win7旗舰版64位占了20多G的内存的清理方法
  16. com.intellij.execution.ExecutionException:at com.intellij.execution.rmi.RemoteProcessSupport.acqu报错
  17. 尬聊器(伪聊天机器人)
  18. word文档变成0字节_如何恢复0字节的word文档【五个步骤免费恢复】
  19. java 授权码模式_Spring Security OAuth2 授权码模式的实现
  20. 发现wps2009个人版一个bug

热门文章

  1. hdu 5144 NPY and shot
  2. 二进制计量单位#K,M,G,T的换算
  3. MongoDB 文档操作之插入、查询
  4. 前端请求路径为何不能写成http://localhost:8080/**/** ?
  5. deepin linux 安装 磁盘管理,deepin安装教程
  6. 我奋斗十八年不是为了和你一起喝咖啡
  7. 神经网络的迭代次数有可能被计算出来吗?
  8. (最小割求最小割集)poweroj2883病毒侵染
  9. 从逻辑功能上看 可以把计算机网络分成,从逻辑功能上看,可以把计算机网络分成通信子网和资源子网。...
  10. blender反选快捷键_【PS】常用操作及快捷键