先写几个英文简写及含义。
reg - 寄存器
mem- 内存
lmm - 立即数
1. 传送指令MOV reg/mem reg/mem/lmm
传送指令,相当于高级语言的赋值语句,把源操作数(reg/mem/lmm)传送到前面的寄存器和内存地址中。
2. 传送填充指令MOVSX/MOVZX reg/mem reg/mem/lmm传送填充指令,和MOV语句具有相同功能的基础上,对目的操作数的高位进行填充,又分为符号填充(MOVSX)和零(MOVZX)填充。
(1)符号填充指令:MOVSX
用源操作数的符号位填充目的操作数的高位数据位。
比如AL = 87H,则MOVSX CX AL指令执行之后 CX就是0FF87H
(2)零填充指令:MOVZX
用0来填充目的操作数的高位数据位。
比如AL = 87H,则MOVZX CX AL指令执行之后 CX就是0087H
3. 交换指令XCHG reg/mem reg/mem
交换指令XCHG是交换两个寄存器,寄存器和内存变量之间内容的指令,两个操作数的数据类型要相同。
4. 取有效地址指令LEA reg mem
是把一个内存变量的有效地址传送到寄存器中
5. 取段寄存器指令LDS/LES/LFS/LGS/LSS reg memLDS是把内存单元的一个“低字”传送到指定的寄存器,并把“高字”传送到段寄存器DS中。
LES,LFS,LGS,LSS是把高字传送到相应的段寄存器ES,FS,GS,SS中。
6. 栈操作指令 栈的实质是一块内存空间,栈的标准访问形式不同于一般的内存访问形式(用内存地址去访问),而是通过入栈(压栈)与出栈(弹栈)指令进行访问,且栈是后进先出的。(也可以用内存地址的形式去访问栈中的内容,但这属于特殊手段),以下就是栈操作指令
(1) 压栈指令:PUSH, PUSHA, PUSHAD
- PUSH reg/mem: 把寄存器和内存单元中的值压入栈中
- PUSHA: 依次把AX,CX,DX,BX,SP,BP,SI,DI等压入栈中
- PUSHAD: 依次把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI等压入栈中
(2) 弹栈指令:POP, POPA, POPAD
- POP reg/mem: 弹出栈首的值到指定的寄存器和内存单元中
- POPA: 把栈中的值依次弹到DI,SI,BP,SP,BX,DX,CX,AX等寄存器中
- POPAD: 把栈中的值依次弹到EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX等寄存器中
压栈与弹栈的补充说明:
ESP/SP寄存器始终指向栈首,所以在PUSH时,SP=SP-2或4, *SP = 操作数(C语法,就是SP寄存器先向前移动两位和四位,然后将值写入指向的内存区域),POP一个项的时候,操作数 = *SP, SP = SP+ 2或4
在16位操作系统使用SP,AX等寄存器,在32位操作系统则应该使用ESP,EAX系列的寄存器,在64位操作系统则可以使用RSP寄存器。
VC++编译器生成的汇编代码使用栈的时候,并不是按标准做法PUSH和POP,而是PUSH多个项目后,用ESP做为基址,向后偏移四位来寻找第二个项,直到访问结束后一次性的把栈清空,这样省略了多次弹栈。
vfor点击传送参数 使用传送指令后
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
1 数据传送指令【微机原理】
数据传送指令
微机原理 指令格式 寄存器 操作数 -
邮件传送
电子邮件电子邮件是依靠邮箱服务器来完成的;SMTP服务器地址:一般是 smtp.xxx.com,例如
java 服务器 邮件发送 -
【传送专题】-谈谈传送网的保护
1 概述做了一段时间网络,有时候也想把自
保护 传送网 链路 丢包 用户需求 -
linux创建test
目 录 第1章 用户和组存在的关系 1 1.1 我们现在所使用的操作系统都是多用户操作系统 1 1.2 id命令查看当前登陆的用户信息 1 1.3 用户UID的分类 1 1.
linux创建test bash 用户信息 普通用户