Кстaти, извиняюсь, если не в тему.
Вот подумал недавно, почему под разные процессоры можно найти множество диалектов тех же Бейсиков, тогда как ассемблер - всегда один и жёстко завязан на документации процессора.
Ведь под тот же x86 имеется как Intel-синтаксис, так и AT&T.
Вот и посмотрел я в сторону процессора 6502 с его синтаксисом. Ведь i8080 не так уж сильно отличается от 6502, чтобы их ассемблеры совсем не совмещались…
То есть, вместо «mov b,a» можно было писать кратко «tab». Но, я пошёл дальше и ещё сильнее упростил синтаксис…
Вместо «mov b,a» пишешь просто «ab». Вместо «stax d» - просто «dea»… Сейчас поясню, почему…
Так, синтаксис коменды можно условно разбить на форматы «WXYZ», «XYZ»/«ZXY», «XY» и «X»/«Y».
- «WXYZ»: HLBC (DAD B), HLDE (DAD D), HLHL (DAD H), HLSP (DAD SP);
- «XYZ»: BCA (LDAX B), DEA (LDAX D), HLA (MOV A,M);
- «ZXY»: ABC (STAX B), ADE (STAX D), AHL (MOV M,A);
- «XY»: AB (MOV B,A), AC (MOV C,A)… MA (MOV A,M);
- «X»: B (PUSH B), D (PUSH D), H (PUSH H), A (PUSH PSW);
- «Y»: C (POP B), E (POP D), L (POP H), F (POP PSW)…
Главная особенность такого синтаксиса в том, что в одной строке можно разместить ряд инструкций, разделяя их пробелом. А если использовать и верхний регистр, то можно обойтись без пробела.
Так:
можно записать:
- Либо как «ca +l ac ba #h ab»;
- Либо как «Ca+lAcBa#hAb»;
- Либо как «(c+l b#h)»…
Как уже догадываетесь, «add l» обозначается как «+l», а вот «adc h» от обозначения «++h» сократился до «#h»… Соответственно, «sub e» - это «-e», а вот «sbb d» - от «--d» сокращён до «=d»…
"Например" P.S.: Извиняюсь за флуд…
Если идея привлечёт положительное внимание и если на досуге проработаю всё более детально (в голове), то создам отдельную тему.