Ассемблер i8080

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

Moderator: Shaos

User avatar
Lavr
Supreme God
Posts: 16682
Joined: 21 Oct 2009 08:08
Location: Россия

Ассемблер i8080

Post by Lavr »

Джентльмены, а существует какой-либо стандарт на ассемблер для i8080?

Я как-то привык к тому, что мы по умолчанию используем, и в этом плане, как мне кажется,
Pretty 8080 Assembler от Viacheslav Slavinsky aka svofski все привычные "умолчания"
поддерживает...

Но вот недавно столкнулся с такой штукой:

Code: Select all

ASM80 - Intel 8080 assembler & linker
Copyright (C) VAN (2007)
И некоторые его "правила" меня несколько смутили... :(

Code: Select all

Определение константы – директива const. 
Формат: 
const имя значение  

Пример:
const sample 123456789  

Определение меток – директива label
label имя  

label proc1       ; Эти две строки делают одно 
:proc1            ; и то же
Есть и еще немного любопытных вещей, типа

Code: Select all

Перемещение к заданному адресу – директива skip: 
skip адрес [, заполнитель]

Но это скорее уж экзотика... А вот equ - так и нету...

Приведен в описании и пример:

Code: Select all

org 0h

const start_address    2000h
const increment        2Dh
const max_address_msb  40h

:start
xra   a
out   0h
lxi   h, start_address

:loop
xra   a

:inner
mov   m, a
cmp   m
jnz   error

adi   increment
jnc   inner

inx   h
mov   a, l
out   00h
mov   a, h
cpi   max_address_msb

jnz   loop
jmp   start

:error
dcr   a
out   00h
jmp   error
Ну я из интересу подсунул код в Pretty 8080 Assembler
и получил полный фейл... :(

Code: Select all

                org 0h
	                
0000	??              const start_address    2000h
0001	??              const increment        2Dh
0002	??              const max_address_msb  40h
	                
0003	??              :start
0004	AF              xra   a
0005	D3 00           out   0h
0007	21 ?? ??        lxi   h, start_address
	                
000A	??              :loop
000B	AF              xra   a
	                
000C	??              :inner
000D	77              mov   m, a
000E	BE              cmp   m
000F	C2 ?? ??        jnz   error
	                
0012	C6 ??           adi   increment
0014	D2 ?? ??        jnc   inner
	                
0017	23              inx   h
0018	7D              mov   a, l
0019	D3 00           out   00h
001B	7C              mov   a, h
001C	FE ??           cpi   max_address_msb
	                
001E	C2 ?? ??        jnz   loop
0021	C3 ?? ??        jmp   start
	                
0024	??              :error
0025	3D              dcr   a
0026	D3 00           out   00h
0028	C3 ?? ??        jmp   error
А на сколько мне известно, svofski при написании руководствовался и литературой специальной
и распространенные отклонения старался учесть...
iLavr
User avatar
Lavr
Supreme God
Posts: 16682
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Не нашел я, где мы обсуждали стандарт на формат текстовой строки в аргументах ассемблера...

Но как бы нам этот вопрос решить? Он мне уже два проекта тормозит! :(



PS. Нашел-таки, что вопрос обсуждали вот здесь, но остроты его это как бы не снимает... :wink:
iLavr
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Подчиняясь синдрому утенка я признаю лишь синтаксис ассемблера Микрон.
User avatar
Lavr
Supreme God
Posts: 16682
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

HardWareMan wrote:я признаю лишь синтаксис ассемблера Микрон.
Да я любой признАю - только хотелось бы точно определиться.

Вот ASSM "Специалиста-МХ" - он развитие этого сАмого "Микрон", как писАли сами разработчики.

Но, что я вижу, даже сравнивая 2 версии пакета "RAMFOS": в старой версии, в которой я работаю,
длина асемблерной строки - 128 символов.
Значит, как утверждал Виталий, надо обрабатывать все выражения в строке этой длины.

Типа:

Code: Select all

   DB   23+45, 4BH-1CH, "THIS IS VERY LONG ASSM STRING", 00H, "_"... и т.д. до 128-го символа...
А в новом пакете "RAMFOS" длину строки ограничили 63-мя символами.

Ну и "где правда, брат"? Когда пишешь компилятор этого?
И это ещё - довольно простой пример...

Хотя бы для "Микрон" были указаны конкретные стандарты и ограничения - что допускается,
а что и нет?
iLavr
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Lavr wrote:Хотя бы для "Микрон" были указаны конкретные стандарты и ограничения - что допускается,
а что и нет?
Так как Микрон на Спеца пришел с РКшки, то читаем исходную литературу:
3439032.png
3436984.png
3426744.png
И далее по тексту. Курить Радио 7'87.
You do not have the required permissions to view the files attached to this post.
User avatar
Lavr
Supreme God
Posts: 16682
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Ассемблер i8080

Post by Lavr »

"Прикурю-ка" я сюда из "Радио №5 1993": На смену ассемблеру "Микрон", устаревшему и с известными глюками,
пришел АССЕМБЛЕР «М&S», он постулирует следующие правила в отношении использования арифметических операций:
Все возможности АССЕМБЛЕРа «МИКРОН» сохранены и добавлены новые:
- введены операции арифметического деления и умножения, а также арифметические операции с символьно заданными псевдооператором DB байтами (например, DB 'А'+80Н);
- допускаются операции арифметического умножения (*, знаковое) и деление (/, беззнаковое);
- все арифметические операции выполняются последовательно, слева направо, БЕЗ ПРИОРИТЕТА;
- допускается использование арифметических операций с байтом, заданным в символьном виде псевдооператором DB, при этом байт должен быть одиночным (допускается: DB 'TES', ' T'+80H и не допускается: DB 'TEST'+80H);
...
Во всем остальном АССЕМБЛЕР «М&S» полностью совпадает с АССЕМБЛЕРОМ «МИКРОН»...
Значит длина строки всё те же 64 символа...
iLavr
User avatar
Shaos
Admin
Posts: 24020
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Ассемблер i8080

Post by Shaos »

А я картинки перегрузил прямо сюда чтобы не пропали...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
shoorick
Doomed
Posts: 487
Joined: 05 Nov 2007 05:08
Location: Украина

Re: Ассемблер i8080

Post by shoorick »

I'll be back! (C) - и вот он я ;)

Наш уважаемый товарищ Tomasz Grysztar, автор прекрасного ассемблера fasm,
написал еще один ассемблер: fasm g, который изначально не привязан к какой-либо конкретной архитектуре, который может быть настроен при помощи макросов на поддержку практически любых процессоров. В комплекте идут поддержка 8051, AVR и JAVA-машины.

Ну, а я, какабычна, написал макросы для поддержки 8085, а заодно и 8048, даже собрал еще одну штучку на 8049 для опытов ;)

В отличие от предыдущей реализации через fasm, здесь выполняется полноценный контроль синтаксиса (если, конечно, не прозевать что-нибудь в макросах, а это, поверьте, оч. легко!), т.е. нельзя безнаказанно вставить в текст инструкцию х86 или явно использовать вместо регистра его номер.

Так что, тестируйте! ;)
VGrad
Maniac
Posts: 208
Joined: 18 Nov 2013 15:15
Location: все оттуда ;)

Re: Ассемблер i8080

Post by VGrad »

Lavr wrote:Джентльмены, а существует какой-либо стандарт на ассемблер для i8080?
Я рекомнедую это:
http://bitsavers.informatik.uni-stuttga ... _Aug81.pdf
User avatar
Lavr
Supreme God
Posts: 16682
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Ассемблер i8080

Post by Lavr »

Lavr wrote:АССЕМБЛЕР «М&S» постулирует следующие правила в отношении использования арифметических операций:
Все возможности АССЕМБЛЕРа «МИКРОН» сохранены и добавлены новые:
- введены операции арифметического деления и умножения, а также арифметические операции с символьно заданными псевдооператором DB байтами (например, DB 'А'+80Н);
- допускаются операции арифметического умножения (*, знаковое) и деление (/, беззнаковое);
- все арифметические операции выполняются последовательно, слева направо, БЕЗ ПРИОРИТЕТА;
- допускается использование арифметических операций с байтом, заданным в символьном виде псевдооператором DB, при этом байт должен быть одиночным (допускается: DB 'TES', ' T'+80H и не допускается: DB 'TEST'+80H);
...
Во всем остальном АССЕМБЛЕР «М&S» полностью совпадает с АССЕМБЛЕРОМ «МИКРОН»...
Что-то я вот это правило как-то не понял... :-?
- допускается использование арифметических операций с байтом, заданным в символьном виде псевдооператором DB,
при этом байт должен быть одиночным (допускается: DB 'TES', ' T'+80H и не допускается: DB 'TEST'+80H);
То есть вот так делать нельзя?

Определим 'TEST':
TEST: DB 1CH

и где-то далее по тексту:
DB TEST+80H - вот так не допускается?

Или в DB можно сложить последний байт строки 'TEST' с 80H == 'T'+80H,
а 'TEST'+80H - вызовет ошибку ?
iLavr
User avatar
Lavr
Supreme God
Posts: 16682
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Ассемблер i8080

Post by Lavr »

Lavr wrote:Или в DB можно сложить последний байт строки 'TEST' с 80H == 'T'+80H,
а 'TEST'+80H - вызовет ошибку ?
Ассемблер "Специалиста" не понимает оба этих варианта...
SPASM.gif
Причем несколько странно не понимает:
MVI A,'Y'+1 ; код Z - он понимает
а вот после DB:
DB 'TEX','T'+2,... - это он понимать не захотел... :-?

С константой и адресом такие фокусы получаются, причем адрес обрезается
до байта, и ошибка при этом не генерируется.
You do not have the required permissions to view the files attached to this post.
iLavr