我收到此错误
cndtlBranch.s:
Assembler messages:
cndtlBranch.s:47: Error: operand type mismatch for `push'
cndtlBranch.s:53: Error: operand type mismatch for `pop'
我很困惑如何在汇编语言中使用push和pop指令。
这是我的代码:
.data
String1:
.ascii "hai!\n"
String2:
.ascii "hai ra!\n"
String3:
.ascii "hai ra mama!\n"
.text
.globl _start
_start:
nop
movl $10, %eax
xorl %eax, %eax
jz HelloWorld
jumpIfZeroNot:
movl $4, %eax
movl $1, %ebx
movl $String1, %ecx
movl $5, %edx
int $0x80
jmp Exit
jumpIfZero:
movl $4, %eax
movl $1, %ebx
movl $String2, %ecx
movl $8, %edx
int $0x80
jmp Exit
Exit:
movl $1, %eax
movl $0, %ebx
int $0x80
HelloWorld:
movl $10, %ecx
printTenTimes:
push %ecx
movl $4, %eax
movl $1, %ebx
leal String3, %ecx
movl $13, %edx
int $0x80
pop %ecx
loop printTenTimes
jmp Exit
答案 0 :(得分:0)
考虑到你使用的风格,我假设你正在使用GNU汇编程序。在这种情况下,请在编译时将选项--32
传递给as
。
这将生成32位代码(这是您正在编写的代码类型)而不是64位代码(可能是您默认生成的代码类型)。