gpt4 book ai didi

assembly - rel8 立即数操作数的 x86-64 Intel 语法?

转载 作者:行者123 更新时间:2023-12-03 06:41:00 25 4
gpt4 key购买 nike

x86-64 中 JMP 的第一种形式是:

Opcode    Instruction  Description
EB cb JMP rel8 Jump short, RIP = RIP + 8-bit displacement sign

例如,JMP rel8=-2eb fefe 是一个单字节签名的 2s-compliment -2。

如何用英特尔语法表达这个 rel8 立即数?

我尝试了以下方法:

测试.s:

.intel_syntax noprefix
.global _start
_start:
jmp -2

编译:

$ gcc -nostdlib test.s
$ objdump -d -M intel

但我得到:

   e9 00 00 00 00           jmp    5 <_start+0x5>

不是所希望的eb fe

(更一般地说,英特尔语法在哪里记录?我在英特尔手册中找不到任何相关内容。英特尔手册解释了如何对操作数进行编码,但没有给出汇编语言的语法。)

更新:

解决方案是:

.intel_syntax noprefix
.global _start
_start:
jmp .

. 必须表示当前指令的地址。组装和拆卸给出:

4000d4: eb fe      jmp    4000d4 <_start>

eb fe 根据需要。 RIP 相对寻址是根据下一条指令进行的,因此汇编器必须为您调整当前指令的大小。

最佳答案

与大多数其他汇编器不同,

(G)AS 显然使用 . 来表示当前地址(当前指令的地址)。

documentation 中有一个小页面记录了它。 .

关于assembly - rel8 立即数操作数的 x86-64 Intel 语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19751701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com