Assembly 打印循环计数%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移

我正在尝试打印循环中的循环计数。但是,尝试将%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移动到%rsi的方式有关。我不知道我做错了什么。

cx
是16位,
rsi
是64位,其中
%d
只使用32位。。您需要转换大小,例如,对于零扩展名,
movzwl%cx,%esi
。请注意,
printf
可以在其他寄存器中销毁您的
cx
,因此,如果以后需要,请务必保留它。PS:当然,您不应该首先使用
cx
作为计数器-而是使用
ecx
。这在cpu上更容易,因为在写入
cx
时,它必须保留前48位,从而导致部分寄存器依赖性暂停。使用
ecx
自动将未使用的顶部位归零。有意义的是,我在代码中更改了它。谢谢你的信息@由于缺少大小前缀,在32位寄存器上运行的Jesterand指令通常小于16位指令-32位是默认操作数大小,并且没有任何部分寄存器性能问题。