Если возникло желание разобраться с ассемблером, вовсе необязательно упираться именно в MMIX. Гораздо ближе будет архитектура ARM. А у меня макбук на процессоре Apple M2 и вовсе под рукой. Это тоже RISC процессор с 64-битной архитектурой. Но в отличие от MMIX вполне реальный и массово доступный. Да и всякие Raspberry Pi нынче везде.
Перепишу-ка я тот самый пример hi.S для архитектуры aarch64:
Перепишу-ка я тот самый пример hi.S для архитектуры aarch64:
#define Halt #1
#define Write #4
#define StdOut #1
.text
.align 2 // Make sure everything is aligned properly
.global _start
_start: mov X0, StdOut // Print to StdOut
adr X1, text // Put address of text message into register X1
mov X2, #23 // Length of our string
mov X16, Write // Unix write() system call
svc #0x80 // Call kernel to output the string
mov X0, #0 // Exit code
mov X16, Halt // Unix _exit() system call
svc #0x80 // Call kernel to terminate the program
text: .ascii "Hi, aarch64 assembler!\n"
Компилируем, запускаем:Кучу примеров для мака к книжке по ассемблеру ARM64 можно найти здесь: github.com/below/HelloSilicon$ cc hi.S -o hi -e _start $ ./hi Hi, aarch64 assembler!

no subject
Date: 2023-09-15 06:10 (UTC)no subject
Date: 2023-09-15 08:40 (UTC)https://bob.cs.sonoma.edu/IntroCompOrg-RPi/sec-sup-call.html
no subject
Date: 2023-09-15 08:27 (UTC)no subject
Date: 2023-09-15 08:39 (UTC)no subject
Date: 2023-09-15 19:39 (UTC)no subject
Date: 2023-09-15 19:44 (UTC)no subject
Date: 2023-09-15 09:03 (UTC)Миленький язычок. (Никогда я на юниксе ассемблер не трогал...)
no subject
Date: 2023-09-15 19:46 (UTC)no subject
Date: 2023-09-15 11:47 (UTC)Я программировал на ассемблере для 8080 и 8086! И для ДВК-2, которая PDP-11. И немного для ЕС ЭВМ (IBM/360) и Электроники Д3-28.
Когда я делал курсовой на 8080, ассемблером был у меня человек. Я как старший программист вначале написал алгоритм на псевдокоде (выдуманном себе языке вроде алгола-60), потом сам начал переводить его на ассемблер 8080. А человек кодировал мои команды в шестнадцатиричные коды и тут же прошивал в ПЗУ, программируемое током. Так мы сделали работающий макет для диплома.
no subject
Date: 2023-09-15 19:47 (UTC)no subject
Date: 2023-09-15 19:36 (UTC)no subject
Date: 2023-09-15 19:44 (UTC)no subject
Date: 2023-09-15 20:23 (UTC)no subject
Date: 2023-09-15 23:37 (UTC)У Интела есть инструкция, которая позволяет прям из юзерспейса остановить процессор и ждать, пока не произойдет доступ по некоему адресу памяти. Есть ли такая на АРМе? Искал, не нашел. Нашел только которая это делает в режиме ядра.
no subject
Date: 2023-09-16 00:17 (UTC)no subject
Date: 2023-09-16 01:54 (UTC)На MIPS есть похожая инструкция WAIT, доступная из юзерспейса. Она останавливает текущее ядро до наступления внешнего события. Обычно это прерывание от таймера, клавиатуры, мышки, сети и т.п. Думаю, что на ARM аналогом будет WFI.
https://stackoverflow.com/questions/18825145/wfe-instruction-handling-in-arm
no subject
Date: 2023-09-16 19:35 (UTC)Из дополнительных знаний: Фейсбук и Эппл вовсю используют модель программирования, основанную на futures, которая замечательно ложится на такой подход. Гугель использует такое ожидание в реализации сетевых виртуальных дисков для виртуальных машин: на физической машине один процессор отводится под ввод-вывод, и двайвера в виртуальных машинах дают запросы через разделяемую память и мутексы в ней. Собственно, насколько я знаю, Интел добавил эту инструкцию по просьбе Гугля.
no subject
Date: 2023-09-17 21:52 (UTC)Но это древнегреческий метод.
Сейчас более кузявые на выбор.
no subject
Date: 2023-09-17 23:06 (UTC)no subject
Date: 2023-09-18 07:36 (UTC)Кузявые выглядят как одна комманда, но учитывают ордеринг для данной модели памяти и могут релаксировать в определённых условиях.
no subject
Date: 2023-09-18 19:41 (UTC)no subject
Date: 2023-09-18 21:27 (UTC)no subject
Date: 2023-09-16 19:59 (UTC)no subject
Date: 2023-09-16 20:03 (UTC)no subject
Date: 2023-09-16 23:05 (UTC)Join me at Intro to 64 bit ARM Assembly: From Basic to Party Tricks https://meetu.ps/e/Mf9G2/1t6P/i
no subject
Date: 2023-09-17 01:29 (UTC)