我的程序正在打印所有可能性

时间:2014-03-31 12:49:49

标签: assembly x86 printf system-calls

我的程序正在打印所有可能性,它是使用cmp助记符和写入系统调用(Linux)在程序集I中编写的。如果我使用printf,一切正常,所以我认为问题出在我的系统调用中,而不是跳转。

section .data
    msg1: dw "Y > X",10,0
    msg2: dw "X > Y",10,0
    msg1_len: equ $-msg1
    msg2_len: equ $-msg2


section .text

;extern printf

global main

main:
    mov ebx, 10
    mov ecx, 20
    cmp ebx, ecx
    jc .xGreater
.xGreater:
    mov eax, 4
    mov ebx, 1
    mov ecx, msg1
    mov edx, msg1_len
    int 0x80
    jmp .done
.yGreater:
    mov eax, 4
    mov ebx, 1
    mov ecx, msg2
    mov edx, msg2_len
    int 0x80
    jmp .done
.done:
    mov eax, 1
    mov ebx, 0
    int 0x80

1 个答案:

答案 0 :(得分:0)

msg1_len: equ $-msg1之后,您的msg2行位置错误,因此它也包含msg2的长度。

学习使用调试器。

PS:此外,您可能希望db不是dw的消息,系统调用也不需要终止零。