我的程序正在打印所有可能性,它是使用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
答案 0 :(得分:0)
在msg1_len: equ $-msg1
之后,您的msg2
行位置错误,因此它也包含msg2
的长度。
学习使用调试器。
PS:此外,您可能希望db
不是dw
的消息,系统调用也不需要终止零。