views:

54

answers:

1
.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
+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
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