Exemple 1

Ejemplo»Hello World» básico para crear un ejecutable en linux con assembler.

Helloworld.asm

;Copyright (c) 1999 Konstantin Boldyshev <konst@linuxassembly.org>
;
;"hello, world" in assembly language for Linux
;
;to build an executable:
;       nasm -f elf hello.asm
;       ld -s -o hello hello.o

section .text
; Export the entry point to the ELF linker or loader.  The conventional
; entry point is "_start". Use "ld -e foo" to override the default.
    global _start

section .data
msg db  'Hello, world!',0xa ;our dear string
len equ $ - msg         ;length of our dear string

section .text

; linker puts the entry point here:
_start:

; Write the string to stdout:

    mov edx,len ;message length
    mov ecx,msg ;message to write
    mov ebx,1   ;file descriptor (stdout)
    mov eax,4   ;system call number (sys_write)
    int 0x80    ;call kernel

; Exit via the kernel:

    mov ebx,0   ;process' exit code
    mov eax,1   ;system call number (sys_exit)
    int 0x80    ;call kernel - this interrupt won't return

Compilar

Compilar el ejecutable:

nasm -f elf hello.asm
ld -s -o hello hello.o

compilar como 32 bits:

ld -m elf_i386 -s -o file file.o

Debugger

Depurador de código asm.

sudo apt install sasm

https://github.com/Dman95/SASM

Calculadora SASM

Per generar el codi en assemblador x86 per al compilador SASM, es pot utilitzar l’exemple anterior i adaptar-lo a la sintaxi de SASM. Aquí tens el mateix exemple de calculadora en assemblador x86 adaptat per al compilador SASM:

%include "io64.inc"

section .data
    num1 db 0
    num2 db 0
    result db 0

    msg1 db 'Introdueix el primer nombre: ', 0
    len1 equ $-msg1

    msg2 db 'Introdueix el segon nombre: ', 0
    len2 equ $-msg2

    msg3 db 'La suma es: ', 0
    len3 equ $-msg3

    msg4 db 'La resta es: ', 0
    len4 equ $-msg4

section .text
    global CMAIN

CMAIN:
    mov rbp, rsp; for correct debugging
    ; Demana el primer número
    mov eax, 4
    mov ebx, 1
    mov ecx , msg1
    mov edx, len1
    int 0x80

    ; Captura el primer número
    mov eax, 3
    mov ebx, 0
    mov ecx, num1
    mov edx, 1
    int 0x80

    ; Demana el segon número
        mov eax, 4
    mov ebx, 1
    mov ecx, msg2
    mov edx, len2
    int 0x80

    ; Captura el segon número
    mov eax, 3
    mov ebx, 0
    mov ecx, num2
    mov edx, 1
    int 0x80

    ; Suma els dos números
    mov al, [num1]
    sub al, 48
    mov bl, [num2]
    sub bl, 48
    add al, bl
    add al, 48
    mov [result], al

    ; Mostra el resultat
    mov eax, 4
    mov ebx, 1
    mov ecx, msg3
    mov edx, len3
    int 0x80

    mov eax, 4
    mov ebx, 1
    mov ecx, result
    mov edx, 1
    int 0x80

    ; Resta els dos números
    mov al, [num1]
    sub al, 48
    mov bl, [num2]
    sub bl, 48
    sub al, bl
    add al, 48
    mov [result], al

    ; Mostra el resultat
    mov eax, 4
    mov ebx, 1
    mov ecx, msg4
    mov edx, len4
    int 0x80

    mov eax, 4
    mov ebx, 1
    mov ecx, result
    mov edx, 1
    int 0x80

    ; Finalitza el programa
    mov eax, 1
    xor ebx, ebx
    int 0x80

Per compilar aquest codi en SASM, cal guardar-lo en un arxiu amb extensió .asm i seleccionar la targeta de compilació adequada. A continuació, es pot compilar el programa i generar el fitxer executable corresponent.