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