汇编-ASCII十进制数和非压缩十进制数
非压缩十进制整数的高4位总是为零, 而ASCII十进制数的高4位则等于0011b。在任何情况下,这两种类型的整数的每个数字都占用一个字节。下面的例子展示了3402在两种格式下是如何存放的:
尽管ASCII算术运算执行得比二进制算术运算要慢, 但是它有两个明显的优点:
●无须在执行算术运算之前对串格式进行转换。
●使用假设的十进制小数点,使实数操作不会在做浮点数运算时存在舍人误差。
ASCII加法和减法允许操作数为ASCII格式或非压缩十进制格式, 而乘法和除法只能使用非压缩十进制数。
AAA加法后拆分成非压缩BCD码
在32位模式下, AAA(加法后的ASCII调整) 指令调整执行ADD或ADC指令后的二进制运算结果。假设两个ASCII数字相加产生的二进制结果存放在AL中, 则AAA将AL 转换为两个非压缩十进制数字并存入AH和AL。一旦成为非压缩格式,通过将AH和AL 与30h进行OR运算, 便可容易地将它们转换为ASCII码。
.386 .model flat,stdcall option casemap:none .stack 4096 Include Irvine32.inc includelib Irvine32.lib ExitProcess PROTO,dwExitCode:DWORD .data .code main PROC mov ah,0 mov al,'8' ;al=38h add al,'2' ;al=al+32h=6Ah aaa ;将al中的和拆分,十位放到ah中,个位放到al中,注意:非压缩格式 ;8+2=10,1放到ah中,0放到al中 ;ah=01h al=00h or ax,3030h ;转换成ASCII quit: mov eax,[esi] INVOKE ExitProcess,0 main ENDP END main
aas减法后
.386 .model flat,stdcall option casemap:none .stack 4096 Include Irvine32.inc includelib Irvine32.lib ExitProcess PROTO,dwExitCode:DWORD .data .code main PROC mov ah,0 ;执行aas指令之前,根据Intelx86的规范,需要确保ah寄存器中的值为0 mov al,'8' sub al,'9' ;al=38h-39h=FFh=-1 aas ;ah=FFh al=09h quit: mov eax,[esi] INVOKE ExitProcess,0 main ENDP END main
AAM乘法后拆分成非压缩BCD码
在32位模式下, A AM(乘法后的ASCII调整) 指令将MUL产生的二进制乘积转换为非压缩BCD码。乘法只能使用非压缩十进制数。
下面的例子实现5乘以6,并调整AX中的结果。调整后,AX=0300h,即30的非压缩十进制数的表示:
.386 .model flat,stdcall option casemap:none .stack 4096 Include Irvine32.inc includelib Irvine32.lib ExitProcess PROTO,dwExitCode:DWORD .data .code main PROC mov bl,05h mov al,06h mul bl ;ax=001Eh=30 aam ;将al中数据拆分成非压缩BCD码,分别放在ah和al中 ;ah=03h al=00h quit: mov eax,[esi] INVOKE ExitProcess,0 main ENDP END main
AAD除法前将非压缩BCD码转换为二进制
在32位模式下, A AD(除法前的ASCII调整) 指令将AX中的非压缩十进制被除数转换为二进制, 为执行DIV指令做准备。
下面的例子将非压缩0307h转换为二进制数, 然后除以5。DIV指令在AL中生成商07h, 在AH中生成余数02h:
.386 .model flat,stdcall option casemap:none .stack 4096 Include Irvine32.inc includelib Irvine32.lib ExitProcess PROTO,dwExitCode:DWORD .data .code main PROC mov ax,0307h ;0307h=BCD码37 aad ;将AX中的非压缩BCD码转换为二进制 ax=0025=37 mov bl,5 div bl ;商al=07h=7 余数ah=02h=2 quit: mov eax,[esi] INVOKE ExitProcess,0 main ENDP END main
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
2022-12-26 win32-style类风格解析
2022-12-26 win32系统窗口类-按钮
2019-12-26 汽车
2019-12-26 礼尚往来
2019-12-26 网上银行账户
2019-12-26 注册的软件