Search code examples
assemblyprintingx86

Printing a character to standard output in Assembly x86


I'm a little confused about how to print a character to the screen using Assembly. The architecture is x86 (linux). Is it possible to call one of the C functions or is there a simpler way? The character I want to output is stored in a register.

Thanks!


Solution

  • Sure, you can use any normal C function. Here's a NASM example that uses printf to print some output:

    ;
    ; assemble and link with:
    ; nasm -f elf test.asm && gcc -m32 -o test test.o
    ;
    section .text
    
    extern printf   ; If you need other functions, list them in a similar way
    
    global main
    
    main:
    
        mov eax, 0x21  ; The '!' character
        push eax
        push message
        call printf
        add esp, 8     ; Restore stack - 4 bytes for eax, and 4 bytes for 'message'
        ret
    
    message db 'The character is: %c', 10, 0
    

    If you only want to print a single character, you could use putchar:

    push eax
    call putchar
    

    If you want to print out a number, you could do it like this:

    mov ebx, 8
    push ebx
    push message
    call printf
    ...    
    message db 'The number is: %d', 10, 0