gpt4 book ai didi

assembly - x86 汇编中符号扩展中的前导零?

转载 作者:行者123 更新时间:2023-12-02 21:44:58 27 4
gpt4 key购买 nike

我读了 Kip IRVINE 的书 Assembly Language for x86 Processors他写道:

Copying Smaller Values to Larger Ones

Although MOV cannot directly copy data from a smaller operand to a larger one, programmers can create workarounds. Suppose count (unsigned, 16 bits) must be moved to ECX (32 bits). We can set ECX to zero and move count to CX:

.data
count WORD 1
.code
mov ecx,0
mov cx,count

What happens if we try the same approach with a signed integer equal to -16?

.data
signedVal SWORD -16 ; FFF0h (-16)
.code
mov ecx,0
mov cx,signedVal ; ECX = 0000FFF0h (+65,520)

The value in ECX (+65,520) is completely different from -16. On the other hand, if we had filled ECX first with FFFFFFFFh and then copied signedVal to CX, the final value would have been correct:

mov ecx,0FFFFFFFFh
mov cx,signedVal ; ECX = FFFFFFF0h (-16)

我的问题是最后一部分。我认为上面代码的第一行我们应该写 mov ecx,FFFFFFFFFh,而不是 0FFFFFFFFh。换句话说,前导零是什么?

最佳答案

为了区分标签数字文字,大多数汇编器要求后者始终以数字开头,即使它是只是一个不重要的零。

如果您计算 0ffffffffh有效十六进制数字的数量,您会发现它们确实是八个,每个数字携带四位信息。
8 乘以 4 等于 32。
您的文字 fffffffffh 的长度是 36 位。

简单地说,像daha7he0h等数字,必须以0开头.
在你看来,你应该自动去掉多余的零。

关于assembly - x86 汇编中符号扩展中的前导零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36689164/

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