汇编语言aaa指令解析,aas指令解析
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指令解析相关推荐
- Uboot中start.S源码的指令级的详尽解析 在线版
http://bbs.chinaunix.net/thread-2312785-1-1.html 以后所有内容更新,都放在这里: Uboot中start.S源码的指令级的详尽解析 在线版 Uboot ...
- Uboot中start.S源码的指令级的详尽解析
Uboot中start.S源码的指令级的详尽解析 版本:v1.9 Crifan Li 摘要 本文对Uboot中的Start.S的源码的几乎每一行,都进行了详细的解析 本文提供多种格式供: 在线阅读 H ...
- Uboot中start.S源码的指令级的详尽解析【转】
本文转载自:http://www.crifan.com/files/doc/docbook/uboot_starts_analysis/release/html/uboot_starts_analys ...
- Vue_双向绑定解析以及指令介绍
Vue Vue双向绑定解析 为什么Vue可以实现双向绑定? 控制台输入定义好的Vue实例 这里会有get/set方法,在es5之后,可以给变量添加get/set方法,就类似于Java中的get/set ...
- Uboot中start.S源码的指令级的详尽解析(转)
Uboot中start.S源码的指令级的详尽解析 转载于:https://www.cnblogs.com/LittleTiger/p/10877516.html
- (一) Marlin-2.1.x 源码解析:G-Code指令的接收、解析与执行
源码文件 涉及源代码文件 Marlin/src/MarlinCore.h /.cpp Marlin/src/gcode/gcode.h /.cpp Marlin/src/gcode/parser.h ...
- Android逆向之旅--「最右」签名算法解析(ARM指令学习恶心篇)
一.前言 今天开始我们后续会开展三篇左右的arm指令学习,因为之前一直都有同学和我说有没有详细的arm指令分析,这个之前的确一直没有好的样本,有的人可能说可以用自己写的C代码然后反编译so来学习,那样 ...
- 最右android工资,Android逆向之旅—最右App的签名算法解析(ARM指令学习不舍篇)
一.逆向分析 本文继续来看最后一篇介绍ARM指令学习,之前的两篇文章已经详细介绍了ARM指令的基础知识,本文继续把剩下来的所有都介绍完了,首先一定要去看前面的基础篇和进阶篇,不然我都很难保证你看这篇文 ...
- 8086汇编语言寻址方式、基本指令和调试指令
一.80x86/Pentium 各种寻址方式 1.立即寻址 立即寻址方式下,操作数作为立即数直接包含在指令中,紧跟在操作码之后与其一起 存放在代码段区域.因此,立即数总是和操作码一起被存入 CPU 的 ...
- 汇编语言笔记10-CALL和RET指令
☞模块化程序设计 模块化程序设计 汇编语言通过call和ret指令实现了模块化程序设计.可以实现多个相互联系.功能独立的子程序来解决一个复杂的问题. 子程序的框架 1 assume cs:code 2 ...
最新文章
- Google母公司5600万美元首投AI芯片初创公司,看上了SambaNova的什么?
- Active report-在Web 上使用 active report
- 鸟哥的Linux私房菜-第10/11/12/13章(vim程序编辑器、学习bash、正则表达式与文件格式化处理、学习Shell Scripts)...
- linux cat EOF使用示例
- .13-Vue源码之patch(3)(终于完事)
- jq匹配偶数行_jquery怎么实现奇偶行不同背景颜色?
- 关于jQuery引用版本问题
- python打包安卓的方法_打包发布Python模块的方法详解
- 浏览器乱码问题的具体解决
- JavaScript编写的《人生不纠结模拟器》
- 密码生成 算法编程题
- 彻底卸载Android Studio
- 梅宏院士:大数据技术的四大挑战与十大趋势
- 腾讯IM实战:低代码超快实现即时通讯录
- win7旗舰版64位占了20多G的内存的清理方法
- com.intellij.execution.ExecutionException:at com.intellij.execution.rmi.RemoteProcessSupport.acqu报错
- 尬聊器(伪聊天机器人)
- word文档变成0字节_如何恢复0字节的word文档【五个步骤免费恢复】
- java 授权码模式_Spring Security OAuth2 授权码模式的实现
- 发现wps2009个人版一个bug
热门文章
- hdu 5144 NPY and shot
- 二进制计量单位#K,M,G,T的换算
- MongoDB 文档操作之插入、查询
- 前端请求路径为何不能写成http://localhost:8080/**/** ?
- deepin linux 安装 磁盘管理,deepin安装教程
- 我奋斗十八年不是为了和你一起喝咖啡
- 神经网络的迭代次数有可能被计算出来吗?
- (最小割求最小割集)poweroj2883病毒侵染
- 从逻辑功能上看 可以把计算机网络分成,从逻辑功能上看,可以把计算机网络分成通信子网和资源子网。...
- blender反选快捷键_【PS】常用操作及快捷键