Для моего университета, диссертации последнего года, я собираюсь реализовать компилятор для скелетной формы языка программирования C, а затем расширять его до тех пор, пока он не будет напоминать что-то более похожее на Java с проверкой границ массивов, type- проверка и пр.
Я относительно компетентен в большей части теории, относящейся к построению компилятора, и имею опыт программирования на языке ассемблера MIPS, поэтому я немного понимаю, что такое писать код чрезвычайно низкого уровня.
Мое главное беспокойство заключается в том, что я, вероятно, смогу пройти весь путь до того момента, когда мне потребуется произвести фактический вывод машинного кода, но тогда я не буду достаточно понимать, как выполняется машинный код с точки зрения операционная система, в которой он работает.
Итак, мой настоящий вопрос в основном таков: «Кто-нибудь знает лучшее место для чтения о написании ассемблера для запуска на процессоре Intel x86-64 под Linux?»
Основным пробелом в моих знаниях является то, как машинный код фактически выполняется на практике. Работает ли он непосредственно на процессоре, создавая syscall (или эквивалент x86), когда ему нужны службы, предоставляемые ядром, или это язык ассемблера, каким-то образом инкапсулированное описание, которое сообщает ядру как для выполнения инструкций (аналогично интерпретируемому языку, такому как Java)?
Любая помощь, которую вы можете оказать, будет принята с благодарностью.