X86 - 64架构与编程基础详解
1. RIP相对寻址的限制
RIP相对寻址存在一个限制,即目标操作数必须位于RIP寄存器的± 2GB地址窗口内。不过,对于大多数程序而言,这个限制很少会成为问题。RIP相对位移值的计算通常由汇编器在代码生成期间自动确定。这意味着我们可以使用像 mov eax,[MyVal] 这样的指令,而无需担心位移值计算的细节。
2. X86 - 64与X86 - 32的差异
2.1 立即值大小限制
除 mov 指令外,X86 - 64模式下立即值的最大大小为32位。若指令操作的是64位宽的寄存器或内存操作数,指定的32位立即值在使用前会被符号扩展为64位。以下是一些使用64位寄存器和立即操作数的指令示例:
| 指令 | 机器码 | 描述 | 结果 |
| — | — | — | — |
| mov rax,100 | 48 C7 C0 64 00 00 00 | 将立即值100加载到RAX寄存器,机器码仅用32位编码该值,再符号扩展为64位保存到RAX | 0000000000000064h |
| add rax,200 | 48 05 C0 C8 00 00 00 | 执行加法前将立即值200符号扩展为64位 | 000000000000012Ch |
| mov rcx,-2000 | 48 C
超级会员免费看
订阅专栏 解锁全文

2525

被折叠的 条评论
为什么被折叠?



