gpt4 book ai didi

assembly - addq 与 64 位立即数?

转载 作者:行者123 更新时间:2023-12-01 23:05:45 24 4
gpt4 key购买 nike

我尝试在汇编程序中添加一些值(AMD AT&T 语法)。但我对大立即数(> 32 位)有问题。

    .globl f
.type f, @function
f:
movq %rdi, %r10
addq $0x0000000000000008, %r10 # no problem
addq $0x0000000122446688, %r10 # error
movq %r10, %rax
ret

标记的行返回以下 gcc 错误:

Error: operand type mismatch for `add'

但是 addq 应该可以处理这个数字:

0000000122446688(十六进制)= 4869875336(十进制)

和 log2(4869875336) ~ 33bit(比 64bit 小很多)。

最佳答案

ADD 不采用 64 位立即数,只有一个版本接受 32 位符号扩展,而您的第二个常量不符合该约束。请参阅指令集引用。

注意:q 后缀指定操作大小,而不是立即数的大小。它是 64 位加法,但操作数编码为 8 或 32 位符号扩展立即数。

关于assembly - addq 与 64 位立即数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23762332/

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