В продолжение темы про иерархию памяти я решил написать пост про регистры процессора. Однако, это оказалось очень большой темой, о которой я не могу написать кратенько. Видимо, потому что плохо в этом разбираюсь. Программируя на 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!

Почему так происходит я постараюсь рассказать в следующих постах.