编程语言
首页 > 编程语言> > 《深入理解计算机系统》——如何分析汇编指令

《深入理解计算机系统》——如何分析汇编指令

作者:互联网

汇编指令的相关基础知识

文章目录

前言

提示:本章的实验二是有关于汇编代码,需要大家能看懂汇编代码,所以这一期总结一些汇编指令、寻址方式等内容。


一、寄存器种类及其功能

在这里插入图片描述

传递参数:%rdi,%rsi,%rdx,%rcx,%r8,%r9
任何函数的返回值传递:%rax
栈指针:%rsp
调用者保存:%rax,%rdi,%rsi,%rdx,%rcx,%r8,%r9,%r10,%r11
被调用者保存:%rbx,%r12,%r13,%r14,%rbp,%rsp

二、常用汇编指令解析

1.mov指令

格式:mov A,B
功能:数据传送指令,有很多种表示形式。用于将数据从A传输到B

2.add指令

格式:add A,B
功能:加法操作。相当于B=B+A;

3.sub指令

格式:sub A,B
功能:减法操作。相当于B=B-A;

4.push指令

格式: push A
功能:压栈指令,本条指令共执行两个操作。先将栈顶指针寄存器%rsp的值减小8,然后再将xxx存入当前%rsp寄存器所指向的栈内存区域。

5.pop指令

格式: pop A
功能:出栈指令,本条指令共执行两个操作。先将%rsp寄存器所指向的内存单元中的数据出栈到xxx(这里的xxx应为寄存器),然后再将栈顶指针寄存器%rsp的值增加8。

6.jmp指令

格式:jmp A
功能:能为跳转到A值所指的位置处继续执行。跳转操作相当于修改%rip的值。此指令只是执行单纯的跳转,并不保存任何返回地址。

7.call指令

格式:call A
功能:功能为调用A值所指的位置处的函数代码。此指令是先将返回地址(即下一条指令的地址)压栈,再跳转到A值所指位置处执行。

8.ret指令

格式:ret
功能:功能为从当前的函数返回,相当于C语言中的return;。执行过程相当于先将返回地址出栈,再到该返回地址处继续执行。

9.cmp指令

格式:cmp A,B
功能:计算A-B,不保存计算结果,但根据计算结果改写条件码(也叫做标志位)。一般搭配条件指令进行使用。

10.jg指令

格式:jg X
功能:条件指令,一般搭配cmp进行使用。该指令的功能是,在cmp A,B中,若A>B,则跳转到X处执行;否则,跳过该指令运行下一条指令。

三、寻址方式

1.立即数寻址

例如:mov $0x3f,%eax
将0x0000003f这个数值装进%rax的低4个字节,%rax高4个字节被自动清0。是否为立即数寻址重点查看有无$符号。

2.直接寻址

例如:mov 0x6001f0,%rax
将0x6001f0单元为起始地址的内容传送至%rax中。

3.间接寻址

例如:mov (%rcx),%rax
将%rcx的值作为地址,去该地址处取数据,传送至%rax中。

4.变址寻址

例如:mov 0x3c(%rbp),%rax
将%rbp的值 + 0x3c作为地址,将该地址所存储的内容传送至%rax

5.BIS(有时也叫做BSI寻址)

例如:mov 0x4006c8(%rbx, %rcx, 8),%rax
将0x4006c8 + %rbx + %rcx*8 作为地址,将该地址所存储的内容传送至%rax。


标签:计算机系统,汇编,mov,地址,寻址,指令,格式,rax
来源: https://blog.csdn.net/yzl234/article/details/123076628