Кст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)…
Главная особенность такого синтаксиса в том, что в одной строке можно разместить ряд инструкций, разделяя их пробелом. А если использовать и верхний регистр, то можно обойтись без пробела.
Так:
Code: Select all
mov a,c
add l
mov c,a
mov a,b
adc h
mov b,a
можно записать:
- Либо как «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»…
НапримерCode: Select all
__0__ __1__ __2__ __3__ __4__ __5__ __6__ __7__ __8__ __9__ __A__ __B__ __C__ __D__ __E__ __F__
0|Nop |Bci |Bca |++Bc |++B |--B |Bi |< |+Bc | |Abc |--Bc |++C |--C |Ci |> |
|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|
1| |Dei |Dea |++De |++D |--D |Di |* |+De | |Ade |--De |++E |--E |Ei |/ |
|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|
2| |Hli | |++Hl |++H |--H |Hi | |+Hl | | |--Hl |++L |--L |Li | |
|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|
3| |Spi | |++Sp |++M |--M |Mi | |+Sp | | |--Sp |++A |--A |Ai | |
|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|
4|Bb |Bc |Bd |Be |Bh |Bl |Bm |Ba |Cb |Cc |Cd |Ce |Ch |Cl |Cm |Ca |
|_____|_____|_____|_____|_____|_____|/Bhl_|_____|_____|_____|_____|_____|_____|_____|/Chl_|_____|
5|Db |Dc |Dd |De |Dh |Dl |Dm |Da |Eb |Ec |Ed |Ee |Eh |El |Em |Ea |
|_____|_____|_____|_____|_____|_____|/Dhl_|_____|_____|_____|_____|_____|_____|_____|/Ehl_|_____|
6|Hb |Hc |Hd |He |Hh |Hl |Hm |Ha |Lb |Lc |Ld |Le |Lh |Ll |Lm |La |
|_____|_____|_____|_____|_____|_____|/HHl_|_____|_____|_____|_____|_____|_____|_____|/Lhl_|_____|
7|Mb |Mc |Md |Me |Mh |Ml |Hlt |Ma |Ab |Ac |Ad |Ae |Ah |Al |Am |Aa |
|/Hlb_|/Hlc_|/Hld_|/Hle_|/Hlh_|/Hll_|_____|/Hla_|_____|_____|_____|_____|_____|_____|/Ahl_|_____|
8|+B |+C |+D |+E |+H |+L |+M |+A |#B |#C |#D |#E |#H |#L |#M |#A |
|_____|_____|_____|_____|_____|_____|/+hl_|_____|_____|_____|_____|_____|_____|_____|/#hl_|_____|
9|-B |-C |-D |-E |-H |-L |-M |-A |=B |=C |=D |=E |=H |=L |=M |=A |
|_____|_____|_____|_____|_____|_____|/-hl_|_____|_____|_____|_____|_____|_____|_____|/=hl_|_____|
A|&B |&C |&D |&E |&H |&L |&M |&A |^B |^C |^D |^E |^H |^L |^M |^A |
|_____|_____|_____|_____|_____|_____|/&hl_|_____|_____|_____|_____|_____|_____|_____|/^hl_|_____|
B||B ||C ||D ||E ||H ||L ||M ||A |?B |?C |?E |?E |?H |?L |?M |?A |
|_____|_____|_____|_____|_____|_____|/|hl_|_____|_____|_____|_____|_____|_____|_____|/?hl_|_____|
C| |C |Jf |Jmp | |B | | | | |Jz | | | | | |
|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|
D| |E |Jd | | |D | | | | |Jc | | | | | |
|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|
E| |L |Je | | |H | | | | |Jo | | | | | |
|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|
F| |F |Jp | | |A | | | | |Jm | | | | | |
|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|
P.S.: Извиняюсь за флуд…
Если идея привлечёт положительное внимание и если на досуге проработаю всё более детально (в голове), то создам отдельную тему.