gpt4 book ai didi

assembly - 为什么要使用 “movl $1, %eax”而不是 “movb $1, %eax”

转载 作者:行者123 更新时间:2023-12-03 12:01:43 34 4
gpt4 key购买 nike

如标题所述,为什么要使用“movl $ 1,%eax”而不是“movb $ 1,%eax”,有人告诉我movl会将%eax的高位清零,但事实并非如此%eax一个等于系统字大小的寄存器?这意味着movl实际上是整数运算(而不是长整数?)

我显然对此有些困惑;谢谢。

最佳答案

opposed to, say, "movb $1, %eax"



该指令无效。您不能在movb指令中使用eax。
您将改为使用8位寄存器。例如:

movb $ 1,$ al

but isn't %eax a register that's equivalent to the size of the system's wordsize?



否。无论系统的寄存器大小如何,EAX始终为32位值。

您将C变量大小与寄存器大小混淆了。 C变量的大小可能会根据您的系统和编译器而变化。

汇编比C更为简单。在GAS汇编中,指令后缀字母“b”,“s”,“w”,“l”,“q”或“t”,以确定要操作的大小操作数。
* b = byte (8 bit)
* s = short (16 bit integer) or single (32-bit floating point)
* w = word (16 bit)
* l = long (32 bit integer or 64-bit floating point)
* q = quad (64 bit)
* t = ten bytes (80-bit floating point)

这些大小是恒定的。他们将永远不会改变。 al始终为8位,而eax始终为32位。

关于assembly - 为什么要使用 “movl $1, %eax”而不是 “movb $1, %eax”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1898834/

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