版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
一个 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)
具体过程如下: