Простой синтаксис ассемблера i8080

8-битные микроконтроллеры и микропроцессоры от Intel и их клоны, а также компьютеры на них построенные

Moderator: Shaos

User avatar
Paguo-86PK
Maniac
Posts: 267
Joined: 12 Apr 2011 20:43
Location: Tashkent

Простой синтаксис ассемблера i8080

Post by Paguo-86PK »

Кст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.: Извиняюсь за флуд…
Если идея привлечёт положительное внимание и если на досуге проработаю всё более детально (в голове), то создам отдельную тему.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Простой синтаксис ассемблера i8080

Post by Lavr »

На мой взгляд, ассемблер как раз изобрели, чтобы очеловечить машинные коды...

А так-то в былые времена, когда я только спаял "Специалист" и еще не было ассемблера,
а только Монитор, так я наизусть помнил, что C9 - это RET (и код - короче этого слова!
и коды можно писать по 16 и больше штук в строку через пробел!) :roll:
Так ещё DEBUG даже в Венде 7 умеет... :)

Но потом появился компилятор ассемблера... к хорошему быстро привыкаешь... :D
Сейчас вот хочется и окно с контекстной подсветкой... и еще чтобы сплит окна попалам был! 8)
iLavr
SteamUser
Junior
Posts: 4
Joined: 17 Jan 2022 03:18

Re: Простой синтаксис ассемблера i8080

Post by SteamUser »

Мнемоники i8080 и так сильно короткие, куда ещё сильнее их укорачивать? Хотя, если взять статистически, то у Z80 подавляющее большинство ещё короче.