深入理解计算机系统——第三章—3.4访问信息

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_40199047/article/details/102474613

一个 x86-64 的中央处理器(CPU)包含一组16个存储64位值的通用目的寄存器。这些寄存器;用来存储整数数据和指针。
这里写图片描述
对于生成1字节和2字节数字的指令会保持剩下的字节不变;生成4字节数字的指令会把高位4个字节置为0

3.4.1 操作数指示符

大多数指令有一个或多个操作数(operand),指示出执行一个操作中要使用的源数据值,以及放置结果的目的位置。各种不同的操作数的可能性被分为三种类型。第一种是立即数(immediate);第二种是寄存器(register);第三种是内存引用
有多种不同的寻址模式
这里写图片描述

3.4.2 数据传送指令

使用最频繁的指令是将数据从一个位置复制到另一个位置的指令。
最简单的数据传送指令——MOV类
这里写图片描述
MOV指令示例:
这里写图片描述
这里写图片描述
移动填充指令如下:
这里写图片描述
扩展示例:
这里写图片描述
tips:汇编内存引用总是用四字寄存器。

movb  $0xF, (%eax)

指令后面的操作数是不对的。

3.4.3 数据传送示例

这里写图片描述
很好的练习:
在这里插入图片描述
答案(颠倒):
在这里插入图片描述

3.4.4 压入和弹出栈数据

这里写图片描述
将一个四字值压入栈中,首先要将栈指针减8,然后将值写到新的栈顶地址。例如:

pushq %rbp

等价于

Decrement stack pointer
subq $8, %rsp
Store %rbp on stack
movq %rbp, (%rsp)

具体过程如下:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_40199047/article/details/102474613