我在网上搜索过,但是我找不到一个清楚的例子来理解这个指令的作用.所以,如果有人可以举一个这样的例子,那对我来说会非常有帮助.
所以我试着通过查看这里的程序集来编写一些C代码:
pushl %ebp
movl %esp, %ebp
movl 12(%ebp), %eax
addl 8(%ebp), %eax
movzbl (%eax), %eax
movsbl %al,%eax
popl %ebp
ret
Run Code Online (Sandbox Code Playgroud)
我看到我有两个变量,它们被加在一起,然后当看到函数开始调用movzbl和movesbl时我迷路了.这里发生了什么?
这是复制(转换)未签名寄存器的指令:http : //www.felixcloutier.com/x86/MOVZX.html
基本上,该指令具有8-> 16、8-> 32、8-> 64、16-> 32和16-> 64。
32-> 64转换在哪里?我需要为此使用签名版本吗?
如果是这样,如何将全64位用于无符号整数?