1:ADC : 扩展加法指令ADC

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.code
main PROCmov dl,0mov al,0FFhadd al,0FFh  ;AL=FEhadc dl,0     ;DL:AL = 01FEhmov edx,0mov eax,0FFFFFFFFhadd eax,0FFFFFFFFh  ;EAX = FFFFFFFEhadc edx,0           ;EDX:EAX = 00000001FFFFFFFEhINVOKE ExitProcess,0
main ENDP
END main

2:扩展加法指令应用,计算两个以字节数组存放的扩展整数之和

include Irvine32.inc.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
op1 BYTE 34h,12h,98h,74h,06h,0A4h,0B2h,0A2h
op2 BYTE 02h,45h,23h,00h,00h,86h,10h,80h
sum BYTE 9 DUP(0).code
main PROCmov esi,OFFSET op1  ;第一个操作数mov edi,OFFSET op2  ;第二个操作数mov ebx,OFFSET sum  ;和数mov ecx,LENGTHOF op1;字节数call Extended_Addmov esi,OFFSET summov ecx,LENGTHOF sumcall Display_Sumcall CrlfINVOKE ExitProcess,0
main ENDP;计算两个以字节数组存放的扩展整数之和
;接收:ESI和EDI 为两个加数的指针
;     EBX为和数变量指针,ECX为相加的字节数
;和数存储区必须比输入的操作数多一个字节
;返回:无
Extended_Add PROCpushadclc
L1:mov al,[esi]   ;取第一个数adc al,[edi]   ;与第二个数相加pushfd         ;保存进位标志mov [ebx],al   ;保存部分和add esi,1add edi,1add ebx,1popfd           ;恢复进位标志loop L1mov BYTE PTR[ebx],0   ;清除和数高字节adc BYTE PTR[ebx],0   ;加上其他的进位popadret
Extended_Add ENDPDisplay_Sum PROCpushad;指向最后一个元素add esi,ecxsub esi,TYPE BYTEmov ebx,TYPE BYTE
L1:mov al,[esi]  call WriteHexB  ;显示该字节sub esi,TYPE BYTEloop L1popadret
Display_Sum ENDPEND main

3:SBB : 带借位减法指令SBB

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.code
main PROC;32位操作数实现64位减法;EDX:EAX = 0000000700000001h - 2mov edx,7   ;高32位mov eax,1   ;低32位sub eax,2   sbb edx,0   ;EDX:EAX = 00000006FFFFFFFEhINVOKE ExitProcess,0main ENDP
END main

4:AAA : 执行加法后进行ASCII调整指令

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.code
main PROCmov ah,0      ;清空AHmov al,'8'    ;AX = 0038hadd al,'2'    ;AX = 006Ahaaa           ;AX=0100h(结果进行ASCII调整)or ax,3030h   ;AX = 3130='10'(转换为ASCII码)INVOKE ExitProcess,0
main ENDP
END main

5:AAA指令应用,多字节加法(ASCII码方式的),有隐含固定小数点的串执行ASCII运算


include Irvine32.incDECIMAL_OFFSET = 5  ;距离串右侧的偏移量
.data
decimal_one BYTE "100123456789765"  ;1001234567.89765
decimal_two BYTE "900402076502015"  ;9004020765.02015
sum BYTE (SIZEOF decimal_one + 1) DUP(0),0.code
main PROC;从最后一个数字位开始mov esi,SIZEOF decimal_one - 1mov edi,SIZEOF decimal_onemov ecx,SIZEOF decimal_onemov bh,0  ;进位值清零
L1:mov ah,0    ;执行加法前清除AHmov al,decimal_one[esi] ;取第一个数字add al,bh   ;加上之前的进位值aaa         ;调整和数AH=进位值mov bh,ah   ;将进位值保存到BHor bh,30h  ;转换为ASCII码add al,decimal_two[esi]  ;加第二个数字aaa          ;AH = 进位值or bh,ah     ;保存的进位值与现在进位值oror bh,30h    ;转成ASCII码or al,30h    ;将al转成ASCII码mov sum[edi],al  ;保存到sumdec esidec ediloop L1mov sum[edi],bh  ;保存最后进位值 ;显示和数字符串mov edx,OFFSET sumcall WriteStringcall Crlfexit
main ENDP
END main

6:AAS : 执行减法后且进行ASCII调整指令

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
val1 BYTE '8'
val2 BYTE '9'.code
main PROCmov ah,0mov al,val1  ;AX =0038sub al,val2  ;AX = 00FFhaas          ;AX = FF09hpushf        ;保存进位标志or al,30h    ;AX = FF39hpopf         ;恢复进位INVOKE ExitProcess,0
main ENDP
END main

7:AAM : 执行乘法后执行的ASCII调整

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
AscVal BYTE 05h,06h.code
main PROCmov bl,AscValmov al,[AscVal+1]mul bl  ;AX = 001Ehaam     ;AX = 0300hINVOKE ExitProcess,0
main ENDP
END main

8:AAD : 执行除法前执行的ASCII调整

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
quotient BYTE ?
remainder BYTE ?.code
main PROCmov ax,0307h   ;被除数aad            ;AX = 0025hmov bl,5       ;除数div bl         ;AX = 0207hmov quotient,almov remainder,ahINVOKE ExitProcess,0
main ENDP
END main

9:DAA : 压缩十进制数相加后,DAA指令将和数转成压缩十进制格式,ADD或ADC指令在AL中生成二进制和数,DAA在加法后执行

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.code
main PROC;计算35+48mov al,35hadd al,48h  ;AL = 7Dhdaa         ;AL = 83h(调整后的结果)INVOKE ExitProcess,0
main ENDP
END main

10:DAA应用,将两个16位压缩十进制整数加法,和数保存在一个压缩的双字

include Irvine32.inc.data
packed_1 WORD 4536h
packed_2 WORD 7207h
sum DWORD ?.code
main PROC;初始化和数与索引mov sum,0mov esi,0;低字节相加mov al,BYTE PTR packed_1[esi]add al,BYTE PTR packed_2[esi]daamov BYTE PTR sum[esi],al;高字节相加,包括进位标志位inc esimov al,BYTE PTR packed_1[esi]adc al,BYTE PTR packed_2[esi]daamov BYTE PTR sum[esi],al;若还有进位,则加上该进位值inc esimov al,0adc al,0mov BYTE PTR sum[esi],al;用十进制显示和数mov eax,sumcall WriteHexcall Crlfexit
main ENDP
END main

汇编语言-012(扩展加法指令ADC、带借位减法指令SBB、执行加法后进行ASCII调整指令、AAS 、AAM、AAD 、DAA指令将和数转成压缩十进制格式)相关推荐

  1. 贺利坚老师汇编课程55笔记:带借位减法指令SBB

    指路老师的博客 SBB是带借位的减法格式,利用CF位上记录的借位值 SBB AX,BX;(AX) = (AX)-(BX)-CF 对任意大的数进行减法运算 003E 1000H - 0020 2000H ...

  2. 汇编语言-013(DAS 、DAA与DAS、QWORD类型用SBB借位减法、编写指令将AX符号扩展到EAX,不能使用CWD、用SHR和条件判断指令将AL循环右移一位、SHLD、压缩十进制转换)

    1:DAS : SUB或SBB在AL中生成二进制结果,DAS(减法后的十进制调整)转压缩十进制格式 .386 .model flat,stdcall.stack 4096 ExitProcess PR ...

  3. 【汇编】流程转移——标志寄存器(ZF—零标志、PF—奇偶标志、SF—符号标志、CF—进位标志、OF—溢出标志)、adc进位加法指令、sbb借位减法指令、cmp指令、DF标志、REP指令、std、cld

    11.1 标志寄存器 8086CPU中有14个寄存器,在历来文章中已经介绍过大部分,还有一个标志寄存器,在cpu中也担任着重要的位置. 在标志寄存器中是按位来起作用的,也就是说其中每一位的0和1都有着 ...

  4. 汇编语言实现模拟单片机数码管的进位借位加减操作

    题目要求如下 利用MCS51系列单片机为CPU,设计电路,连接4位数码管,并连接 两个按键,按第一个按键数码管显示值增加1,按另外一个按键数码管显示值减1.要求线路连接正确,包含晶振电路和复位电路,数 ...

  5. 【汇编学习笔记】DAA指令

    32 位模式下,ADD 或 ADC 指令在 AL 中生成二进制和数,DAA(加法后的十进制调整)指令将和数转换为压缩十进制格式.比如,下述指令执行压缩十进制数 35 加 48.二进制和数(7Dh)被调 ...

  6. 贺利坚老师汇编课程55笔记:带进位加法指令ADC

    指路老师的博客 ADC是带进位的加法格式,利用CF位上记录的进位值 ADC AX,BX;(AX) = (AX) + (BX) + CF 在AL里只能把1舍去为30H assume cs:codesgc ...

  7. 汇编语言符号扩展指令及应用示例

    1. 什么是符号扩展?为什么要用符号扩展? 所谓符号扩展,就是将数据的表示大小加倍,数值仍保持不变,即将符号位扩展到同样大小的寄存器空间中去,由两部分构成一个比原值表示大一倍的数.正数必须要0扩展,负 ...

  8. STM8单片机ADC带缓存的连续采样模式

      在上一篇文章中说了STM8的ADC连续采样模式,为了提高采样的精度和速率,STM8单片机还提供了带缓存的连续采样模式,也就是说ADC会连续采集8个数据,放在缓存中,读取数据时可以一次从缓存中读取8 ...

  9. 应广单片机adc_台湾应广单片机 单片机PMC131 带12位ADC、采用FPPATM技术

    PMC131 台湾应广 一级代理 现货批发 长期供应 带12位ADC.采用FPPATM技术.单核心8位单片机 PMC131替代松翰SN8P2711芯片 PIN对PIN,引脚功能及脚位完全兼容, 仅需更 ...

最新文章

  1. 嵌入式软件工程师笔试题(含答案)
  2. GridView 导出为Excel
  3. tools.jar seem to ....
  4. 弹出VIEW.非dialog
  5. 【小技巧】桌面图标出现蓝色问号的怎么办?
  6. 解决http://localhost:3000/favicon.ico 的404 问题(含案例解析)
  7. hibernate学习内容
  8. Codeforces Round #158 (Div. 2) A - Adding Digits
  9. 限定某个目录禁止解析php 限制user_agent php相关配置
  10. matlab软件及基础实验第8单元,知到高等数学与MATLAB启蒙第八单元章节测试答案...
  11. 在Node中使用ES7新特征——async、await
  12. Jepsen mysql_Hello Clojure - Jepsen
  13. 「首席看业务架构」商业模式画布
  14. 用Flash CS4打开fla文件提示“意外的格式”的解决方法
  15. KEIL编程中如何重定义printf()函数,以便在后来的开发中使用此函数进行串口数据输出
  16. ubuntu mysql快捷键_ubuntu快捷键设置大全
  17. leetcode 栈739. 每日温度
  18. 力扣46.全排列(回溯法)
  19. 【2019春招】平安科技开发实习生面经
  20. 2021强烈推荐的十大Win10必备工具(重装系统必备)

热门文章

  1. 模态对话框和全选反选
  2. appium和selenium不同与相同之处
  3. appium GUI介绍
  4. lr_start_timer,lr_get_transaction_duration,lr_get_transaction_wasted_time函数使用总结
  5. IE8给你选择的理由
  6. 限制 计算机中 某用户上网 win7,Win7旗舰版怎么限制孩子的上网时间?电脑限制孩子上网时间的方法...
  7. linux 文件inode,linux文件系统-inode学习整理
  8. oracle 创交表,创建交叉报表(oracle)_oracle
  9. html iframe post,使用Jquery和IFrame的跨子域请求(GET,POST,…)
  10. mysql lepus_MySQL 监控软件lepus天兔