Premier programme 64 bit en assembleur sous OpenIndiana : afficher du texte sur le terminal

- Passer en root

su -

- Installer le compilateur nasm

pkg install pkg://openindiana.org/developer/assembler/nasm

- Ecrivez le programme 'hello_illumos.asm' dans votre éditeur de code préféré

; hello_illumos.asm
; nasm -felf64 hello_illumos.asm && ld -o hello hello_illumos.o

%define SYS_write 4 ;

default rel
global _start

section .rodata
 msg: db "Hello from illumos!", 10
 msg_len equ $-msg

section .text
_start:
 mov rax, SYS_write ; write(int fd, const void *buf, size_t n)
 mov rdi, 1 ; stdout
 lea rsi, [rel msg]
 mov rdx, msg_len
 syscall ; RCX,R11 clobbered
 jc .err ; CF=1 -> erreur, RAX=errno

 ; exit(0)
 mov rax, 1 ; SYS_rexit
 xor rdi, rdi
 syscall

.err: ; ici RAX contient errno
 mov rdi, 1 ; code de sortie 1
 mov rax, 1 ; rexit
 syscall

- Assembler & Linker

nasm -felf64 hello_illumos.asm && ld -o hello hello_illumos.o

- Lancer le programme

./hello

- Le résultat :

Hello from illumos!

Deuxième exemple en rajoutant une ligne de texte supplémentaire :

; hello2_illumos.asm
; nasm -felf64 hello2_illumos.asm && ld -o hello2 hello2_illumos.o

%define SYS_REXIT 1 ; rexit
%define SYS_WRITE 4 ; write

default rel
global _start

section .rodata
 msg: db "Hello from illumos!", 10
 db "I'm great!", 10
 msg_len equ $-msg

section .text
_start:
 ; write(1, msg, msg_len)
 mov rax, SYS_WRITE
 mov rdi, 1
 lea rsi, [rel msg]
 mov rdx, msg_len
 syscall
 jc .err

 ; rexit(0)
 mov rax, SYS_REXIT
 xor rdi, rdi
 syscall

.err:
 ; rexit(1) en cas d'erreur
 mov rax, SYS_REXIT
 mov rdi, 1
 syscall

- Assembler & Linker

nasm -felf64 hello2_illumos.asm && ld -o hello2 hello2_illumos.o

- Lancer le programme

./hello2

- Résultat

Hello from illumos!
I'm great!


↑ Haut de page