【问题标题】:My program is printing all possibilities我的程序正在打印所有可能性
【发布时间】:2014-03-31 12:49:48
【问题描述】:

我的程序正在打印所有可能性,它是用汇编编写的,我正在使用 cmp 助记符和 write 系统调用 (Linux)。如果我使用 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

【问题讨论】:

  • 有一天,人们可能会意识到 x86 只是一种可以编写汇编代码的架构。

标签: assembly x86 printf system-calls


【解决方案1】:

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

学习使用调试器。

PS:另外,您可能希望db 而不是dw 用于消息,并且系统调用不需要终止零。

【讨论】:

    猜你喜欢
    • 2022-06-23
    • 2013-11-08
    • 1970-01-01
    • 2021-12-29
    • 2016-03-02
    • 1970-01-01
    • 2016-01-02
    • 2017-12-20
    • 2011-07-30
    相关资源
    最近更新 更多