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  ;测试位5 为1就跳转jnz L0mov al,statustest al,00010011b  ;位0、1、4为1就跳转jnz L1mov al,statusand al,10001100b  ;屏蔽位2、3、7cmp 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

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

  1. java中push和pop指令的作用_汇编语言PUSH和POP指令(压栈和出栈)

    汇编里把一段内存空间定义为一个栈,栈总是先进后出,栈的最大空间为 64K.由于 "栈" 是由高到低使用的,所以新压入的数据的位置更低,ESP 中的指针将一直指向这个新位置,所以 E ...

  2. push、pop指令

    push.pop指令 转载于:https://www.cnblogs.com/LoveFishC/archive/2012/07/25/3846605.html

  3. 小甲鱼关于push,pop指令的一个编程题

    编程: (1)将10000H~ 1000FH这段空间当作栈,初始状态是空的; (2)设置AX=001AH,BX=001BH ; (3)将AX.BX中的数据入栈; (4)然后将AX.BX清零; (5)从 ...

  4. push,pop指令

    push,pop指令 push,pop格式可以是如下的: 1.push 寄存器 2.pop 寄存器 3.push 段寄存器 4.pop 段寄存器 5.push 内存单元 6.pop 内存单元 当pus ...

  5. ARM CM0 push和pop指令

    <ARM Cortex-M0权威指南(中文) 高清扫描版.pdf> <20071230123408_常用ARM指令集及汇编v1.0.12发行> <cortex_m0_Ge ...

  6. 8086汇编push和pop指令注意点(push pop 只对字操作(不允许字节进栈))

    push和pop是用来操作栈的2个指令. push寄存器:将一个寄存器中的数据入栈pop寄存器:出栈用一个寄存器接收数据 1.push pop 只对字操作(不允许字节进栈)操作数长度为32位时进出栈为 ...

  7. java中push和pop指令的作用_push和pop的区别?

    1.push是什么?(推进) push就是推,延伸为推进.这个它是汇编的一个指令,(在其它语言中也可能会见到它).意思都是差不多的,就是把一个元素放入栈中.你可以假想栈是一个放光盘的那种盒子,有底没盖 ...

  8. 3.9 push、pop指令

    push 寄存器 pop 寄存器push 段寄存器 pop 段寄存器push 内存单元 pop 内存单元 数据是不能直接跟段寄存器发生关系的,需要先经过通用寄存器,再保存到段寄存器 问题3.7 编程, ...

  9. 基于8086CPU微处理器的汇编学习之PUSH、POP指令

    --------------------------------------------- 栈,是一种数据结构,我觉得栈是抽象的,但是它同样也是实际的,因为它在内存中是连续的内存,只不过人们限制了它的 ...

最新文章

  1. Could not get unknown property ‘compileSdkVersion‘ for project
  2. 效果提升7%、速度增加220%,OCR开源神器PaddleOCR再迎升级
  3. Windows C/C++ 语言菜单基本编程
  4. cassandra连不上,报Stop listening for CQL clients, Failed managing commit log segments
  5. Photoshop阴影与内阴影
  6. Redis八种数据类型及应用场景介绍
  7. Java实现一个会员制度的CD出租销售店,基本的功能有:一是对会员的管理,包括增加会员、删除会员;二是对货品的管理,包括出租、销售CD、进货、统计账目等。
  8. 运行php web文件路径,php的web路径获取
  9. selenium报错 : WebDriverException: ‘chromedriver‘ executable needs to be in PATH解决方案
  10. 医院各领域榜单。22个科室、100种常见疾病
  11. 计算机硬盘图标怎么更改,硬盘图标变了怎么办?WinXP电脑硬盘图标变了怎么改回来?...
  12. 甘特图是什么意思?甘特图制作步骤教程
  13. w ndows7与XP哪个好,Win7系统与Win XP系统哪个更好?Windows7与WindowsXP区别介绍-系统城·电脑系统下载之家...
  14. 【龙讯module小课堂】浅谈对gap的认识:PWmat中修正gap的module
  15. ye graph editor安装
  16. 后来的我们都老了——看《后来的我们》
  17. 教学概述+教学内容+教学原则+教学方法+教学组织...+教学模式和教学策略
  18. sdhc卡文件丢失常见原因和两种恢复方法
  19. SVN如何本地拉取项目
  20. 目前有哪些免费私人服务器租用呢?阿里云服务器免费试用3个月!

热门文章

  1. php event_base_new,php event拓展基本使用
  2. websocket的加密和解密
  3. FormatJS – 让你的 Web 应用程序国际化
  4. Flexible 弹性盒子模型之flex
  5. td过长,将固定宽度table撑开
  6. AJAX Tookits -- ConfirmButton
  7. 面试中关于多线程同步,你必须要思考的问题
  8. MySql 踩坑小记 1
  9. 增加 jQueryValidate的手机号验证功能
  10. 简单谈谈js中的MVC