ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2022-02-22 22:07:09  阅读:222  来源: 互联网

标签:计算机系统 汇编 mov 地址 寻址 指令 格式 rax


汇编指令的相关基础知识

文章目录

前言

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


一、寄存器种类及其功能

在这里插入图片描述

传递参数:%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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有