Assembly 打印循环计数%cx寄存器
我正在尝试打印循环中的循环计数。但是,尝试将%cx移动到%rdi时出错: 正在打印保存循环计数值的%cx:Assembly 打印循环计数%cx寄存器,assembly,x86-64,att,Assembly,X86 64,Att,我正在尝试打印循环中的循环计数。但是,尝试将%cx移动到%rdi时出错: 正在打印保存循环计数值的%cx: movw %cx, %rsi movq $stringNumber, %rdi xorq %rax, %rax call printf 这是我在.data部分的内容: .stringNumber: .asciz "Number: %d\n" 我得到这个错误: Error: unsupported instruction `mov' 我认为这与我试图将%cx移
movw %cx, %rsi
movq $stringNumber, %rdi
xorq %rax, %rax
call printf
这是我在.data部分的内容:
.stringNumber: .asciz "Number: %d\n"
我得到这个错误:
Error: unsupported instruction `mov'
我认为这与我试图将%cx移动到%rsi的方式有关。我不知道我做错了什么。
cx
是16位,rsi
是64位,其中%d
只使用32位。。您需要转换大小,例如,对于零扩展名,movzwl%cx,%esi
。请注意,printf
可以在其他寄存器中销毁您的cx
,因此,如果以后需要,请务必保留它。PS:当然,您不应该首先使用cx
作为计数器-而是使用ecx
。这在cpu上更容易,因为在写入cx
时,它必须保留前48位,从而导致部分寄存器依赖性暂停。使用ecx
自动将未使用的顶部位归零。有意义的是,我在代码中更改了它。谢谢你的信息@由于缺少大小前缀,在32位寄存器上运行的Jesterand指令通常小于16位指令-32位是默认操作数大小,并且没有任何部分寄存器性能问题。