Hello nasm assembler
В продолжение темы про иерархию памяти я решил написать пост про регистры процессора. Однако, это оказалось очень большой темой, о которой я не могу написать кратенько. Видимо, потому что плохо в этом разбираюсь. Программируя на Java мне никогда не приходилось оперировать регистрами. Это очень низкоуровневые вещи. Однако, чтобы разбираться с проблемами в производительности о регистрах надо знать. Для того, чтобы потрогать регистры я установил Nasm. Он первый попался под руку и поддерживал Windows синтаксис, который мне показался понятнее Linux варианта.
brew install nasm
В первой же ссылке в Google на mac os assembler hello world оказалось:
; /usr/local/bin/nasm -f macho64 64.asm && ld -macosx_version_min 10.7.0 -lSystem -o 64 64.o && ./64
global start
section .text
start:
mov rax, 0x2000004 ; write
mov rdi, 1 ; stdout
mov rsi, msg
mov rdx, msg.len
syscall
mov rax, 0x2000001 ; exit
mov rdi, 0
syscall
section .data
msg: db "Hello, world!", 10
.len: equ $ - msg
Если этот код сохранить в файле 64.asm и выполнить первую строчку из файла, то она дейсвительно выведет:
Hello, world!
Viola!
Почему так происходит я постараюсь рассказать в следующих постах.