.section .data
msgI:
.ascii "x = y\n"
msgI_end:
msgM:
.ascii "x > y\n"
msgM_end:
msgL:
.ascii "x < y\n"
msgL_end:
.section .text
.globl main
main:
movl $5, %eax #x = 5
movl $5, %ebx #y = 10
cmp %ebx, %eax
je IGUAL
jg MAYOR
jl MENOR
IGUAL: #Esta seccion de cogido se encarga
movl $4, %eax #de imprimir si x = y usando
movl $1, %ebx #los system calls de Linux
pushl $msgI
call printf
#movl $size, %edx
int $0x80
jmp EXIT
MAYOR: #Esta seccion de cogido se encarga
movl $4, %eax #de imprimir si x > y usando
movl $1, %ebx #los system calls de Linux
pushl $msgM
call printf
#movl $size, %edx
int $0x80
jmp EXIT
MENOR: #Esta seccion de cogido se encarga
movl $4, %eax #de imprimir si x < y usando
movl $1, %ebx #los system calls de Linux
pushl $msgL
call printf
#movl $size, %edx
int $0x80
jmp EXIT
EXIT:
movl $1, %eax #System calls para salir del programa
int $0x80
views:
54answers:
1
+2
A:
movl $5, %ebx #y = 10
Code does not match comments.
int $0x80
jmp EXIT
Why are you calling the interrupt? printf
is already done printing, and has overwritten registers like %eax
.
Now, the reason why you're getting your messages all jumbled together: printf
takes a NUL-terminated string. If it doesn't see a '\0'
, it keeps on going.
Solution: add a \0
to the end of your msg*
strings. printf
will then stop printing there.
ephemient
2009-11-04 22:50:11
I forgot about this earlier, but if you're using NASM: using `.asciiz "abc"` is equivalent to `.ascii "abc\0"`. Which you choose is up to you.
ephemient
2009-12-02 22:36:04