Linux汇编指令

本文介绍了Linux环境下几种基本的汇编指令,包括数据传输的mov、push、pop和lea指令,以及算术运算的add和sub指令。同时,详细阐述了转移控制指令如leave、ret和call的功能及其实现机制,这些都是理解底层程序执行的关键。

一、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指令

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

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

3.2、ret指令

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

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

3.3、call指令

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

指令功能
callcall指令等价于下面的指令:(1) pushl %eip(2)movl func,%eip
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值