
Сообщение от
Hunta
Но даже в этом случае понятней, чем извращение A4 - LOAD R4
Прояснитe момент?
Почему «A4» - извращение?
Если оглядеть многие архитектуры, то зубрить машинный код нужно везде.
Понимаю, если пользователь начал с Бейсика, потом перешёл на Паскаль и дальше - в Си, то машинный код - до лампочки!
А вот потом идёт Ассемблер, когда слишком узкие места.
Но здесь не надо смотреть с высока современных достижений!
Например, если забыть про файлы, дампы и даже перфоленту, а также убрать из процессора блок автоматической выборки команд, как это было в самом начале, то можно представить нечто, как пульты прошлого века:

Вот тут бинарное представление команды очень сильно влияет на скорость разработки кода и количество опечаток/ошибок.
Понятно, что в RISC систему команд гуманизировать сложно. А вот CISC бинарно можно за уши притянуть к человеку.
Раз критика сосредоточилась вокруг кода «A4», то разберу пример с ним.
Если в 70-х популярна было восьмеричная система счисления, то в i8080 она и прослеживается:- 0000…0077 - группа загрузки и инкрементов (0000 - NOP)
- 0100…0177 - группа команд пересылок MOV (0166 - HLT)
- 0200…0277 - группа операций АЛУ
- 0300…0377 - группа управления ходом исполнения
Система команд i8080 достаточно проста (для детей 80-х с РАДИО-86РК / ЮТ-88) и чем-то походит даже на RISC: Бывают трюки написания алгоритмов из одних однобайтовых команд в «спортивных задачах»…
У меня ушли долгие годы на переработку команд i8080, чтобы человеком машинный код читался легче.
- 0x12 - загрузить R1 в R2: Варианты - «T12», «MOVE R1,R2», «LD R2,R1», «MOV CH,BH»
- 0x1A - сложить R1 к Аккумулятору: Варианты - «ADD R1», «ADD A,R1», «ADD AL,BH»
- 0x1B - Вычесть R1 из Аккумулятора: Варианты - «SUB R1», «SUB A,R1», «SUB AL,BH»
- 0x1C - конъюнкция R1 над Аккумулятором: Варианты - «CONJUNCT R1», «AND A,R1», «AND AL,BH»
- 0x1D - дизъюнкция R1 с Аккумулятором: Варианты - «DISJUNCT R1», «OR A,R1», «OR AL,BH»
- 0x1E - эксклюзивное ИЛИ R1 с Аккумулятором: Варианты - «EOR R1», «EOR A,R1», «XOR AL,BH»
- 0x1F - флаги по сравнению R1 с Аккумулятором: Варианты - «SUB F,A,R1», «FLAGS A,R1», «CMP AL,BH»
- 0xA2 - Аккумуляция Аргумента в R2: Варианты - «APLY R2,BYTE», «ACCUMULATE R2,BYTE», «ARGUMENT R2,BYTE», «MOV R2,ARG»
- 0xAA - Аргумент сложить к Аккумулятору: Варианты «ADD ARG», «ADD A,ARG», «ADD AL,ARG»
- 0xAB - Аргумент Вычесть из Аккумулятора: Варианты - «SUB ARG», «SUB A,ARG», «SUB AL,ARG»
- 0xAC - конъюнкция Аргумента над Аккумулятором: Варианты - «CONJUNCT ARG», «AND A,ARG», «AND AL,ARG»
- 0xAD - дизъюнкция Аргумента с Аккумулятором: Варианты - «DISJUNCT ARG», «OR A,ARG», «OR AL,ARG»
- 0xAE - эксклюзивное ИЛИ Аргумента с Аккумулятором: Варианты - «EOR ARG», «EOR A,ARG», «XOR AL,ARG»
- 0xAF - флаги по сравнению Аргумента с Аккумулятором: Варианты - «SUB F,A,ARG», «FLAGS A,ARG», «CMP AL,ARG»
- 0xB8 - безусловное Ветвление с 8-битным смещением: Варианты - «BRANCH $±127», «JMP $±127»
- 0xBC - условное Ветвление по CF: Варианты - «BRCS LABEL», «BCS LABEL», «JC LABEL»
- 0xBE - условное Ветвление по ZF (EF): Варианты - «BREQ LABEL», «BEQ LABEL», «JE LABEL»
- 0xBF - условное Ветвление по Фиктивному ZF (EF): Варианты - «[B]BRNE LABEL», «BNE LABEL», «BRFE LABEL», «JNE LABEL»
- 0xC1 - инкремент R1: Варианты - «INC R1», «INC BH»
- 0xC2 - инкремент R2: Варианты - «INC R2», «INC CH»
- 0xC3 - инкремент R3: Варианты - «INC R3», «INC DH»
- 0xCB - инкремент указателя: Варианты - «INC BX»
- 0xCC - инкремент указателя: Варианты - «INC CX»
- 0xCD - инкремент указателя: Варианты - «INC DX»
- 0xD4 - декремент R4: Варианты - «DEC R4», «DEC AL»
- 0xD5 - декремент R5: Варианты - «DEC R5», «DEC BL»
- 0xD6 - декремент R6: Варианты - «DEC R6», «DEC CL»
- 0xDB - декремент указателя: Варианты - «DEC BX»
- 0xDC - декремент указателя: Варианты - «DEC CX»
- 0xDD - декремент указателя: Варианты - «DEC DX»
- 0xF1 - прерывание на Функцию #1: Варианты - «RST 1», «FN 1», «INT 1»
- 0xF2 - прерывание на Функцию #2: Варианты - «RST 2», «FN 2», «INT 2»
- 0xF3 - прерывание на Функцию #3: Варианты - «RST 3», «FN 3», «INT 3»
- 0xF9 - прерывание на Функцию #9: Варианты - «RST 9», «FN 9», «INT 9»
Тем самым, просто прочитав этот список, Вы уже научились кодировать весь машинный код x80!
Сколько времени у человека уйдёт на заучивание машинного кода любого другого процессора?
Чтобы дампом написать свою первую программу, Вам потребуются считанные минуты!
На одном форуме задумку так и обозвали - Процессор Акына: Что вижу, то и значит…
Это ли ни тот самый WYSYWYG-Процессор?
То есть, любой из Вас с лёгкостью уже может понять, что делает этот программный код:
Код:
x80: .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F
0000 A1 76 A5 D0 A4 4E CB D4 BF FC 00
Если лень думать…
Код:
Z80: .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F
0000 26 76 2E D0 3E 4E 23 3D 20 FC 76
[свернуть]
P.S.: Тем самым, в своём минимальном исполнении мой x80 - тот же i8080, но с WYSYWSYG-машинным кодом.
А с другой, как я вижу, здесь критикуете именно синтаксис Ассемблера, а не мою концепцию организации системы команд…