如何使用循环在汇编语言中多次打印字符串

时间:2013-12-29 18:24:43

标签: assembly x86

我收到此错误

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

1 个答案:

答案 0 :(得分:0)

考虑到你使用的风格,我假设你正在使用GNU汇编程序。在这种情况下,请在编译时将选项--32传递给as

这将生成32位代码(这是您正在编写的代码类型)而不是64位代码(可能是您默认生成的代码类型)。