汇编语言-007(ADD_SUB_NEG 、 PUSH和POP指令应用 、 AND,OR,XOR使用 、 条件跳转应用)

1: ADD_SUB_NEG : ADD伪指令增加数值,SUB伪指令减少数值,NEG取反+1

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
var1 DWORD 10000h
var2 DWORD 20000h.code
main PROCmov eax,var1add eax,var2mov eax,var2sub eax,var1neg eaxneg var1INVOKE ExitProcess,0
main ENDP
END main

2: ASM26 : 仅用PUSH和POP指令来交换EAX和EBX的值

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.code
main PROCmov eax,10mov ebx,20push eaxpush ebxpop eaxpop ebxINVOKE ExitProcess,0
main ENDP
END main

3: 高级语言的函数通常在堆栈中的返回地址下,立刻声明局部变量,在汇编语言子程序开端编写一条指令来保留 两个双字变量的空间,对这两个局部变量赋值1000h和2000h

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.code
main PROCcall proc_1INVOKE ExitProcess,0
main ENDPproc_1 PROCsub esp,8mov esi,espmov eax,2000hmov [esi],eaxadd esi,4mov eax,1000hmov [esi],eaxadd esp,8ret
proc_1 ENDP
END main

4: 用变址寻址方式将双字数组中的元素复制到同一个数组中其前面的一个位置上

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
arrayD DWORD 1,2,3,4,5.code
main PROCmov ecx,LENGTHOF arrayD - 1mov esi,0mov ebx,arrayD[esi * TYPE arrayD]inc esi
L1:  mov eax,arrayD[esi * TYPE arrayD]dec esimov arrayD[esi * TYPE arrayD],eaxadd esi,2loop L1dec esimov arrayD[esi * TYPE arrayD],ebxINVOKE ExitProcess,0
main ENDP
END main

5: 一组语句显示子程序的返回地址

.386
.model flat,stdcallinclude Irvine32.inc.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.code
main PROCcall proc_1INVOKE ExitProcess,0
main ENDPproc_1 PROCpop eaxcall  WriteHexpush eaxret
proc_1 ENDP
END main

6: 链接数组项,一个链接索引数组的起始变址对应一个字符数组,根据变址取出正确顺序存入另一个字符数组

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
start DWORD 1
chars BYTE 'H','A','C','E','B','D','F','G'
links DWORD 0,4,5,6,2,3,7,0
outChars BYTE SIZEOF chars DUP(?).code
main PROCmov ecx,LENGTHOF charsmov edi,0mov esi,start
L1:mov al,chars[esi * TYPE chars]mov outChars[edi * TYPE outChars],almov eax,esimov esi,links[eax * TYPE links]inc ediloop L1INVOKE ExitProcess,0
main ENDP
END main

7: 递归过程,ECX设定调用次数,不使用其他条件判断,只使用LOOP

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
count DWORD 0.code
main PROCmov ecx,2call proc_1INVOKE ExitProcess,0
main ENDPproc_1 PROCinc countloop L1retL1:call proc_1ret
proc_1 ENDPEND main

8: AND,OR,XOR使用例子

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.code
main PROCmov ax,0FFFFhand ax,0FFh ;清除AX的高8位,AX的低8位不变mov ax,0or ax,0FF00h ;高AX的8位置1,AX的低8位不变mov eax,0FFFF0000hxor eax,0FFFFFFFFh  ;不使用NOT,使EAX所有位取反mov eax,10and eax,1   ;当EAX的32位值为偶数时,零标志为1,奇数时为0mov eax,11and eax,1INVOKE ExitProcess,0
main ENDP
END main

9: 条件跳转应用,测试状态位

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
status BYTE 88.code
main PROCmov al,statustest al,00100000b  ;测试位51就跳转jnz L0mov al,statustest al,00010011b  ;0141就跳转jnz L1mov al,statusand al,10001100b  ;屏蔽位237cmp al,10001100b  ;所有位都置1?je L2L0:
L1:
L2:INVOKE ExitProcess,0
main ENDP
END main

10: 条件跳转应用,两个数最大数

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
status BYTE 88.code
main PROCmov eax,100mov ebx,99mov edx ,eax  ;假设EAX存放的是最大数cmp eax,ebxjae L1      ;EAX大于等于EBX就跳转,不再改变EDX的值mov edx,ebx
L1:      ;EDX存放最大值INVOKE ExitProcess,0
main ENDP
END main

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

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

相关文章

Automatic Reference Counting

Automatic Reference Counting http://clang.llvm.org/docs/AutomaticReferenceCounting.html转载于:https://www.cnblogs.com/StarMud/articles/2642263.html

实验5 数据查询--连接查询

实验5 数据查询--连接查询一、实验目的 1.熟悉等值联接查询的方法。 2.熟悉非等值联接查询的方法。 3.熟悉自身联接查询的方法。 4.熟悉外联接查询的方法。 5.熟悉复合条件联接的方法。 二、实验要求 应用SELECT语句对数据库eshop中数据进行指定条件的连接查询。 三、实验步骤…

Java RandomAccessFile readInt()方法与示例

RandomAccessFile类readInt()方法 (RandomAccessFile Class readInt() method) readInt() method is available in java.io package. readInt()方法在java.io包中可用。 readInt() method is used to read signed 32-bit integer value from this RandomAccessFile. readInt()方…

天高地厚(转)

信乐团-天高地厚作词:武雄作曲:詹凌驾 keith stuart你累了没有可否伸出双手想拥抱怎能握着拳头我们还有很多梦没做还有很多明天要走要让世界听见我们的歌准备好没有时间不再回头想要飞不必任何理由不管世界尽头多寂寞你的身边一定有我我们说过不管天高地厚想飞到那最高最远最洒…

实验4 数据查询--简单查询

实验4 数据查询--简单查询一、实验目的 1.掌握SELECT语句的基本方法。 2.掌握从表中查询特定行的方法。 3.掌握从表中查询前N行的方法。 4.掌握从查询结果中去掉重复行的方法。 5.掌握使用列的别名的方法。 6.掌握从表中查询特定列的方法。 7.掌握查询语句中的通配符的使用。 …

POJ 3189 Steady Cow Assignment

POJ_3189 一开始题意各种理解错,首先输入的那个矩阵第i行第j列的值表示的是奶牛i会第j个中意的牛棚,最后求的range就相当于j的range,至于range是变化的范围,比如j在1、2变化,那么range就应该是2,也就是MAX-…

汇编语言-008(条件跳转应用 、loopnz 条件循环指令使用 、loopz 条件循环指令使用 、 if语句编写汇编时 、while语句编写汇编时 、循环内的if语句嵌套)

1: 条件跳转应用,三个数中最小数 .386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data V1 WORD 1 V2 WORD 2 V3 WORD 3.code main PROCmov ax,V1 ;假设V1是最小值cmp ax,V2 ;如果AX小于等于V2jbe L1mov ax,v2 L1:cmp ax,V…

java jar包示例_Java包isCompatibleWith()方法与示例

java jar包示例包类的isCompatibleWith()方法 (Package Class isCompatibleWith() method) isCompatibleWith() method is available in java.lang package. isCompatibleWith()方法在java.lang包中可用。 isCompatibleWith() method is used to check the specification versi…

面向对象的JavaScript编程

Javascript对于做过Web程序的人不应该是陌生,初期是用来做一些简单的FORM验证,基本上是在玩弄一些技巧性的东西。IE 4.0引入了DHTML,同时为了对抗Netscape的Javascript,提出了自己的脚本语言JScript,除了遵循EMAC的标准之外&#…

实验3 SQL Server 表中记录更新操作

实验3 SQL Server 表中记录更新操作一、实验目的 1.掌握INSERT INTO语句的方法。 2.了解INSERT FROM语句的方法。 3.掌握UPDATE语句的方法。 4.掌握DELETE语句的方法。 二、实验要求 1.在已经创建好的eshop数据库中的各表中添加样例数据。 三、实验步骤 1.在eshop数据库的memb…

HTML 5 标签

HTML 5 <nav> 标签 定义和用法 <nav> 标签定义导航链接的部分。 实例 <nav> <a href"index.asp">Home</a> <a href"html5_meter.asp">Previous</a> <a href"html5_noscript.asp">Next</a>…

Assert和异常处理

Assert用于检查不应该发生情况&#xff0c;用来帮助开发人员对问题的快速定位。异常处理用于对程序发生异常情况的处理&#xff0c;增强程序的健壮性、容错性&#xff0c;减少程序使用中对用户不有好的行为&#xff0c;不让(通常也不必)用户知道发生了什么错误。实际开发中&…

tooctalstring_Java Long类toOctalString()方法的示例

tooctalstring长类toOctalString()方法 (Long class toOctalString() method) toOctalString() method is available in java.lang package. toOctalString()方法在java.lang包中可用。 toOctalString() method is used to represent an octal string of the given parameter […

汇编语言-009(表驱动选择 、条件控制流伪指令 、逻辑移位SHL,SHR 算术移位SAL,SAR)

1&#xff1a; 表驱动选择&#xff0c;用查表来代替多路选择结构的一种方法 .386 .model flat,stdcallinclude Irvine32.inc.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data CaseTable BYTE A ;查询值DWORD Process_A ;过程地址 EntrySize ($ - CaseT…

如何解决EDM邮件营销中的图片难题

随着互联网的高速发展&#xff0c;已然进入到了读图时代&#xff0c;EDM邮件营销尤为注重图片的运用。纯文本的邮件太枯燥&#xff0c;巧借图片&#xff0c;可以提高内容的可读性&#xff0c;吸引用户注意力。然而&#xff0c;我们却常常不得不面对这样的尴尬&#xff1a;打开邮…

实验2 SQL Server 表操作

实验2 SQL Server 表操作一、实验目的 1.了解表设计和表结构相关知识。 2.掌握管理工具创建、修改、查看和删除表的方法。 3.掌握T-SQL语句创建、修改、查看和删除表的方法。 4.了解表和数据库的关系。 二、实验要求 1.创建好的“网上购物系统”数据库eshop中的members表、pro…

深入理解.net的事件与委托机制

首先介绍一个为什么要在事件中引入委托这个概念&#xff1a;  事件是对象发送的消息&#xff0c;以发信号通知操作的发生。操作可能是由用户交互&#xff08;例如鼠标单击&#xff09;引起的&#xff0c;也可能是由某些其他的程序逻辑触发的。引发事件的对象称为事件发送方。…

Java ObjectOutputStream flush()方法与示例

ObjectOutputStream类flush()方法 (ObjectOutputStream Class flush() method) flush() method is available in java.io package. flush()方法在java.io包中可用。 flush() method is used to flush this stream and write bytes immediately of any buffered output to the u…

ffmpeg 命令裁剪合并

1 mp4格式&#xff1a; 裁剪从一个视频中的1分钟、2分钟、3分钟开始截取10秒 ffmpeg -i test_1280x720.mp4 -ss 00:01:00 -t 10 -codec copy copy1.mp4 ffmpeg -i test_1280x720.mp4 -ss 00:02:00 -t 10 -codec copy copy2.mp4 ffmpeg -i test_1280x720.mp4 -ss 00:03:00 -t 10…

Struts2初始化流程及源码分析

1.1 Struts2初始化 在讲Struts2的初始化之前&#xff0c;应该为大家描述下Web应用中的过滤器Filter&#xff0c;这关系到我们对核心过滤器FilterDispatcher的正确理解。 Filter&#xff1a;一个filter是一个对象&#xff0c;为每个请求资源(一个servlet或静态内容) &#xff0c…