26 de mai. de 2011

Meu primeiro programa em Assembler ...

Eh, meu primeiro programa. Postei só pra fazer charminho!

; Programa pra imprimir uma letra na tela.
;
; Eduardo Rolim
;
; Montar: nasm -f elf primeiro.asm
; Linkar: ld -s -o primeiro primeiro.o
; Executar: ./primeiro

section .data
    letra: db '0',10      ; Tipo byte, com valor zero
    tamLetra: equ $-letra ; Tamanho da variável letra

section .text
    global _start

_start:                  ; Ponto de entrada da aplicação
    call le
    call escr
    call fim
    
le: ;ssize_t read(int fd, void *buf, size_t count)
    mov eax, 3           ; syscall "read"
    mov ebx, 0           ; stdin
    mov ecx, letra       ; variavel
    mov edx, tamLetra    ; tamanho do input
    int 80h              ; chama o kernel
    ret                  ; retorna para _start

escr: ;ssize_t write(int fd, const void *buf, size_t count)
    mov eax, 4           ; syscall "write"
    mov ebx, 1           ; stdout
    mov ecx, letra       ; variavel
    mov edx, tamLetra    ; tamanho do output
    int 80h              ; chama o kernel
    ret                  ; retorna para _start

fim: ;void exit(int status)
    mov eax, 1
    mov ebx, 0
    int 80h