汇编基础教程(二)——常用汇编指令之传送指令
2012-10-29 17:05
435 查看
原文地址:http://www.tinpont.com/knowledge/assembly_instruction_move.html
-----------------------------------------------------------------------------------分割线-----------------------------------------------------------------------------------
经过前面的学习,相信大家对寄存器产生了一点印象。现在我们来进一步学习汇编指令,加深对寄存器的印象。
寄存器,其实可以理解成系统规定名字的变量。在32位系统中,我们可以把寄存器理解成4个字节的无符号整形(unsigned int)变量。其实在内存的角度来看,所有数据都是以二进制保存的,之所以能展现出不同的内容,只不过是因为我们赋予了它们不同格式罢了。
这个可以说是最最常见的赋值指令了,格式如下:
dst代表目标,src代表源,下面就不多解释了,大家习惯就好。可翻译成伪C代码 dst = src。
将src传送到dst,其中dst可以是地址,也可以是寄存器。而src可以是地址,可以是寄存器,也可以是立即数(也就是常数,写死的)。注意:dst不可以是立即数,src和dst不可以同时为地址,另外src和dst的数据长度必须相同(字节数相同)。例如:
带符号的扩展传送指令格式如下:
MOVSX和MOV指令相似,也是将src传送给dst,只是src的数据长度要小于dst,不足位用src的符号来填充。例如:
零填充传送指令格式如下:
MOVZX和MOVSX指令相似,只不过不足位恒定用0来填充。例如:
将dst和src中的数据相互交换,dst和src可以是寄存器,可以是内存,但不可以同时为内存。例如:
这个指令在大多数情况下用作运算,因为其支持同时多种运算方式,格式如下:
[]是取值符号,与指针的*取值类似,而LEA又是取地址指令,所以实际上上面的指令翻译成伪C代码应该是dst = src。
将有效内存地址数值传送到寄存器,其中dst只能是寄存器。而src可以是寄存器,也可以是立即数。例如:
push指令多用于函数调用参数传递和环境保护,与pop天生一对。格式如下:
在寄存器介绍的时候我们已经知道ESP寄存器总是指向堆栈栈顶,而堆栈的使用是从高地址到低地址的。push指令首先会将esp减4(在32位系统下),再MOV [esp],src,例如:
pop指令与push指令完全相反,格式如下:
需要注意的是,dst必须为寄存器。pop指令首先会执行MOV dst,[esp],再将esp加4(在32位系统下),例如:
-----------------------------------------------------------------------------------分割线-----------------------------------------------------------------------------------
经过前面的学习,相信大家对寄存器产生了一点印象。现在我们来进一步学习汇编指令,加深对寄存器的印象。
寄存器,其实可以理解成系统规定名字的变量。在32位系统中,我们可以把寄存器理解成4个字节的无符号整形(unsigned int)变量。其实在内存的角度来看,所有数据都是以二进制保存的,之所以能展现出不同的内容,只不过是因为我们赋予了它们不同格式罢了。
MOV数据传送指令(move)
这个可以说是最最常见的赋值指令了,格式如下:将src传送到dst,其中dst可以是地址,也可以是寄存器。而src可以是地址,可以是寄存器,也可以是立即数(也就是常数,写死的)。注意:dst不可以是立即数,src和dst不可以同时为地址,另外src和dst的数据长度必须相同(字节数相同)。例如:
MOVSX 符号填充指令(move sign-extends)
带符号的扩展传送指令格式如下:
MOVZX 零填充指令(move zero-extends)
零填充传送指令格式如下:
XCHG 数据交换指令(exchanges)
LEA有效地址传送指令(load effect address)
这个指令在大多数情况下用作运算,因为其支持同时多种运算方式,格式如下:将有效内存地址数值传送到寄存器,其中dst只能是寄存器。而src可以是寄存器,也可以是立即数。例如:
PUSH 数据入栈指令(push)
push指令多用于函数调用参数传递和环境保护,与pop天生一对。格式如下:
POP 数据出栈指令(pop)
pop指令与push指令完全相反,格式如下:相关文章推荐
- 汇编基础教程(二)——常用汇编指令之传送指令
- 汇编基础教程(二)——常用汇编指令之运算指令
- 汇编基础教程(二)——常用汇编指令之运算指令
- 汇编基础教程(二)——常用汇编指令之条件指令
- 汇编语言基础教程-指令:传送,交换,取地址
- 汇编基础教程(二)——常用汇编指令之条件指令
- 汇编基础教程(二)——常用汇编指令之其他指令
- 汇编基础教程(二)——常用汇编指令之其他指令
- [中级教程]GNU ARM汇编程序开发之----几个常用的指令
- 汇编语言基础教程-减法指令
- 汇编语言基础教程-乘法指令
- Android逆向中常用的ARM汇编指令基础知识
- 汇编语言基础教程-加法指令
- Android逆向中常用的ARM汇编指令基础知识
- 汇编语言基础教程-除法指令
- ARM 汇编常用指令
- ARM汇编基础-存储和加载指令
- 关于汇编语言中传送指令存在一些限制的理解
- 简图记录-ARM汇编基础(基本指令、伪指令、协处理器指令)
- PLSQL 基础教程 五 常用数据库对象简介(函数存储过程包)