我正在尝试使用Mac OSX学习汇编,但是,我遇到了invalid operand
错误。目前,我正在尝试在汇编中创建一个简单的for
循环到10,相当于c++
中的以下内容:
for(int i = 0; i < 10; i++){
}
我当前的集会(simpleloop.s
):
.globl _main
_main:
pushq %rbp
movq %rsp, %rbp
subq $16, %rsp
movl $10, %cx
loop:
dec %cx
jnz loop
leave
ret
但是,当我使用gcc simpleloop.s
运行此剪辑时,收到以下错误消息:
错误:指令的操作数无效 movl $ 10,%cx
我意识到在StackOverflow上已多次询问有关在汇编中创建for循环的问题,但是,我无法找到任何关于具有Mac OSX特定程序集的for循环的问题或答案。任何人都可以解释为什么我收到错误以及如何纠正错误?在我看来,Mac OSX只接受x86
使用&#34; AT&amp; T&#34;句法。谁能告诉我为什么会这样?
答案 0 :(得分:2)
看着这条指令:
movl $10, %cx
movl
代表move long
,即移动32位。 %cx
但是是一个16位寄存器。这就是你的汇编程序抱怨的原因。要么移动到32位寄存器%ecx
,要么使用16位移动指令movw
。或者,只需使用mov
,因为汇编程序可以从寄存器操作数中推断出大小。