> 文章列表 > Linux汇编指令

Linux汇编指令

Linux汇编指令

一、Linux汇编指令

1、数据传输指令

1.1、mov指令

指令功能:mov指令用于寄存器与寄存器之间、内存与寄存器之间传送数据

指令 功能
movl %ebx, %eax 将寄存器ebx中的值送入寄存器eax中

1.2、push指令

指令功能:将一个值推入堆栈,指令首先减少 rsp的值,再将源操作数复制到堆栈。操作数是 16 位的,则 rsp 减 2,操作数是 32 位的,则 rsp 减 4

指令 功能
pushl %rbp 等价于:(1)subl $4, %rsp (2)movl %rbp (%rsp)

1.3、pop指令

指令功能:pop指令首先把ESP指向的堆栈元素复制到一个16位或32位目的操作数中,再增加ESP的值。如果操作数是16位,ESP加2;如果操作数是32位、ESP加4

指令 功能
popl %ebp 等价于:(1)movl (%esp), %ebp (2)addl $4, %esp

1.4、lea指令

取有效地址指令LEA(Load Effective Address),把一个内存变量的有效地址送给指定的寄存器,相当于C语言中的“&。下面有一个具体的实例,如下:先定义了一个int类型的变量,然后取这个变量的地址,对应的指令是:lea -0xc(%rbp),%rax

#include <stdio.h>void main()
{int a = 20;int *p = &a;printf("a=%d", *p);
}

2、算术运算指令

2.1、add指令

指令功能:将长度相同的源操作数与目标操作数进行加操作,并把结果保存到目标操作数

指令 功能
addl %eax,%edx 将%edx+%eax的结果存放进寄存器edx中

2.2、sub指令

指令功能:从目标操作数中减去源操作数,并把最终的结果保存到目标操作数

指令 功能
subl %eax,%edx 将%edx-%eax的结果存放进寄存器edx中

3、转移控制指令

3.1、leave指令

指令功能:结束一个函数调用的堆栈帧,就是恢复函数调用者对应的堆栈

指令 功能
leave leave指令等价于下面的指令:(1)movl %ebp, %esp (2)popl %ebp

3.2、ret指令

指令功能:将栈顶的返回地址弹出到EIP,然后按照EIP此时指示的指令地址继续执行程序

指令 功能
ret ret指令等价于下面的指令:popl %eip

3.3、call指令

指令功能:首先是将返回地址(也就是call指令要执行时EIP的值)压入栈顶,然后是将程序跳转到当前调用的方法的起始地址

指令 功能
call call指令等价于下面的指令:(1) pushl %eip(2)movl func,%eip