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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/379324.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c#中textbox属性_C#.Net中的TextBox.Visible属性与示例

c#中textbox属性Here we are demonstrating use of Visible property of TextBox Control. 在这里,我们演示了TextBox Control的Visible属性的使用。 Visible property contains two values 可见属性包含两个值 True: Using this - textbox can be visible on par…

VS2010报表

http://technet.microsoft.com/zh-cn/library/dd220516.aspx转载于:https://www.cnblogs.com/mingyongcheng/archive/2012/09/11/2679722.html

思维的领域特殊性

思维的领域特殊性 1971年,心理学家Danny Kahneman和Amos Tversky做了这样一个实验,他们问统计学教授一些不像统计学的统计学问题,其中一个大概如下:假设你生活的城市有两家医院,一家大一家小,某一天&#x…

汇编语言-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 PROTO,dwExitCode:DWORD.code main PROC;计算85-48mov bl,48hmov al,85hsub al,bl ;AL3Dhd…

python程序执行时间_用于在Python中查找程序执行时间的程序

python程序执行时间The execution time of a program is defined as the time spent by the system to execute the task. As we all know any program takes some execution time but we dont know how much. So, dont worry, in this tutorial we will learn it by using the…

公约数和公倍数

描述 小明被一个问题给难住了&#xff0c;现在需要你帮帮忙。问题是&#xff1a;给出两个正整数&#xff0c;求出它们的最大公约数和最小公倍数。 输入 第一行输入一个整数n&#xff08;0< n<10000)&#xff0c;表示有n组测试数据; 随后的n行输入两个整数i,j&#xff08;…

.net 笔记尝试(二)

.NET笔试题集&#xff08;二&#xff09; 1.using关键字有什么用&#xff1f;什么是IDisposable&#xff1f; using可以声明namespace的引入&#xff0c;还可以实现非托管资源的释放&#xff0c;实现了IDisposiable的类在using中创建&#xff0c;using结束后会自动调用该对象的…

网上照片之博客照片与网店照片拍摄心得

本文选自《非常摄影手记&#xff1a;2天玩转单反相机》一书 让照片在博客上更热的心得 1.有时美好的不仅是照片&#xff0c;还有拍摄照片的过程。尽量真实全面地记录自己的摄影过程&#xff0c;展示最感人的自我。 2.不要急功近利&#xff0c;不想成“名博”的博主不是好博主&a…

string.length_C.中的String.Length属性示例

string.lengthC&#xff03;String.Length属性 (C# String.Length property) String.Length property is used to get the total number of characters in the string object (length of the string); it calls with this string and returns the total number of characters. …

汇编语言-014(编写过程的应用、伪指令LEA、ENTER、LEAVE、LOCAL、递归函数、INVOKE、ADDR、PROC伪指令声明过程)

1&#xff1a;编写过程&#xff0c;仅用移位和加法&#xff0c;实现任意32位符号数与EAX相乘 include Irvine32.inc.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.code main PROC mov eax,80mov ebx,53call BitwiseMultiplycall WriteDecINVOKE ExitProcess,0 main ENDP;EA…

从键盘输入一个字符,判断其是不是大写字母,如果是则请输出这个大写字母,如果不是请输出“这不是一个大写字母”的英文信息(要求:能连续输出直到输出“#”结束)。

从键盘输入一个字符&#xff0c;判断其是不是大写字母&#xff0c;如果是则请输出这个大写字母&#xff0c;如果不是请输出“这不是一个大写字母”的英文信息&#xff08;要求&#xff1a;能连续输出直到输出“#”结束&#xff09;。 P155 例4.13 DATA SEGMENT STR DB 0DH,0…

再谈angularjs DI(Dependency Injection)

在前面已经介绍了关于angularjs&#xff0c;以及扩展了一些jQuery ui的一些组件为angularjs的directive。在这里应进口007 在上篇留言我们来看看在angularjs中的DI特性。 DI&#xff1a;依赖注入&#xff0c;是一种软件设计模式&#xff0c;应DIP依赖倒置原则&#xff0c;描述组…

Access sql语句创建表及字段类型

Create TABLE 测试表 ( 文本255 VARCHAR NOT NULL, 文本20 VARCHAR(20) NOT NULL, 日期时间 DATETIME, 数字1 BYTE, 数字2 SMALLINT, 数字4 INTEGER, 布尔 BIT, 自动编号 COUNTER(10, 5) CONSTRAINT PK_TVIPLevel26 PRIMARY KEY, 小数 NUME…

c语言getc函数_C语言中的getc()函数与示例

c语言getc函数C语言中的getc()函数 (getc() function in C) Prototype: 原型&#xff1a; int getc(FILE *filename);Parameters: 参数&#xff1a; FILE *filenameReturn type: int 返回类型&#xff1a; int Use of function: 使用功能&#xff1a; In the file handling…

汇编语言-015(PROC伪指令定义参数方式、EXTERNDEF、INCLUDE 、EXTERN 、INVOKE、PROC、PROTO 、MOVSB 、MOVSD 、CMPSD )

1&#xff1a;使用PROC伪指令定义参数方式不通过寄存器传参&#xff0c;计算数组之和 .386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data array DWORD 10000h,20000h,30000h,40000h,50000h theSum DWORD ?.code ArraySum PROC USES esi ecx,ptr…

编写计算表达式(X-Y+25)/Z的值得程序,要求将其商和余数分别放在A、B单元中。(设X和Y是32位无符号数,A、B和Z是16位无符号数,不考虑溢出情况。)

编写计算表达式&#xff08;X-Y25&#xff09;/Z的值得程序&#xff0c;要求将其商和余数分别放在A、B单元中。&#xff08;设X和Y是32位无符号数&#xff0c;A、B和Z是16位无符号数&#xff0c;不考虑溢出情况。&#xff09; P151 例4.8 汇编思路&#xff1a;首先在DATA段定…

《深入浅出WPF》笔记——绑定篇(一)

上一节&#xff0c;有记录写到&#xff1a;在WPF里&#xff0c;数据驱动UI&#xff0c;数据占核心地位&#xff0c;UI次之。怎么恢复数据的核心地位&#xff0c;那就要先了解一下Binding。 一、Binding 基础 1.1WPF中Data Binding的带来的方便 在设计架构的时间&#xff0c;大家…

你的代码完成了吗?(之二)——可维护性和规范性

二. 可维护性和规范性 对于代码来说&#xff0c;这两个属性其实是紧密相连的。什么样的代码最好维护呢&#xff1f;当然是规范的代码了。再差的规范也要比没有规范强得多。 之前做对日项目的时候&#xff0c;日本人对于“规范”这个东西&#xff08;他们称之为开发规约&#xf…

c语言feof函数_使用示例的C语言中的feof()函数

c语言feof函数C语言中的feof()函数 (feof() function in C) Prototype: 原型&#xff1a; int feof(FILE* filename);Parameters: 参数&#xff1a; FILE *filenameReturn type: int(0 or 1) 返回类型&#xff1a; int(0或1) Use of function: 使用功能&#xff1a; In C l…

5种经典排序算法,每个程序员都应该知道

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 有没有想过当您应用从低到高、从高到低或按字母顺序等过滤器时&#xff0c;亚马逊或任何其他电子商务网站中的产品如何排序&#xff1f;排序算法对于此类网站起着至…