use*_*613 2 binary x86 assembly hex unsigned
我阅读了 Kip IRVINE 的著作《x86 处理器汇编语言》,他写道:
将较小的值复制到较大的值
尽管 MOV 不能直接将数据从较小的操作数复制到较大的操作数,但程序员可以创建变通方法。假设计数(无符号,16 位)必须移动到 ECX(32 位)。我们可以将 ECX 设置为零并将计数移动到 CX:
Run Code Online (Sandbox Code Playgroud).data count WORD 1 .code mov ecx,0 mov cx,count如果我们用一个等于 -16 的有符号整数尝试相同的方法会发生什么?
Run Code Online (Sandbox Code Playgroud).data signedVal SWORD -16 ; FFF0h (-16) .code mov ecx,0 mov cx,signedVal ; ECX = 0000FFF0h (+65,520)ECX 中的值 (+65,520) 与 -16 完全不同。另一方面,如果我们先用 FFFFFFFFh 填充 ECX,然后将 signedVal 复制到 CX,则最终值将是正确的:
Run Code Online (Sandbox Code Playgroud)mov ecx,0FFFFFFFFh mov cx,signedVal ; ECX = FFFFFFF0h (-16)
我的问题是最后一部分。我认为我们应该在上面的代码中写第一行mov ecx,FFFFFFFFFh,而不是 0FFFFFFFFh。换句话说,什么是前导零?
为了区分标签和数字文字,大多数汇编程序要求后者始终以数字开头,即使它只是一个非有效零。
如果您计算其中有效的 十六进制数字的数量,0ffffffffh您会发现它们确实是八位,每一位都携带四位信息。
8 乘以 4 是 32。
你的文字fffffffffh长度是 36 位。
简单地说,诸如dah a7h、e0h等等之类的数字必须以 开头0。
在您看来,您应该自动摆脱多余的零。