Я не думаю, что есть хорошее решение для MacOS. Насколько я знаю, GNU binutils не поддерживает двоичный формат Mach в macOS, что означает, что вы не можете просто использовать тот же ассемблер, что и в Linux (gas).
Проблема не только в синтаксисе, фактически, синтаксис как таковой частично поддерживается. Вы также столкнетесь с другими связанными с платформой различиями. Например, директива .type не будет использоваться в macOS, а имена символов начинаются с подчеркивания.
Если у вас возникли проблемы с клавиатурой в виртуальных машинах, я бы рекомендовал настроить какой-либо серверный дистрибутив Linux на виртуальной машине, а затем запустить его в автономном режиме. Получите доступ, войдя в систему с помощью ssh. Таким образом, вы взаимодействуете с ним через терминал, и у вас не должно быть проблем с клавиатурой.
Docker также может быть вариантом, так как он фактически запускает Linux на виртуальной машине под macOS, но может потребоваться больше усилий для выяснения.
В любом случае, если вас интересует версия кода, работающая на macOS:
.intel_syntax noprefix
.data
msg: .asciz "Hello, world!\n"
.text
.global _main
_main: PUSH RBP
MOV RBP, RSP
LEA RDI, [RIP + msg]
CALL _printf
MOV EAX, 0
POP RBP
RET
Я удалил строку «.type», добавил подчеркивания к main и printf и изменил «MOV RDI, offset flat: msg» на «LEA RDI, [RIP + msg]».
Сборка с "clang -o hw1 hw1.s", нет причин притворяться, что мы запускаем gcc;)