nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 16:30



Reply to topic  [ 11 posts ] 
Ассемблер i8080 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Джентльмены, а существует какой-либо стандарт на ассемблер для i8080?

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

Но вот недавно столкнулся с такой штукой:
Code:
ASM80 - Intel 8080 assembler & linker
Copyright (C) VAN (2007)

И некоторые его "правила" меня несколько смутили... :(

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

Пример:
const sample 123456789 

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

label proc1       ; Эти две строки делают одно
:proc1            ; и то же


Есть и еще немного любопытных вещей, типа
Code:
Перемещение к заданному адресу – директива skip:
skip адрес [, заполнитель]

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

Приведен в описании и пример:
Code:
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:
                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


09 Jan 2013 05:36
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Не нашел я, где мы обсуждали стандарт на формат текстовой строки в аргументах ассемблера...

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



PS. Нашел-таки, что вопрос обсуждали вот здесь, но остроты его это как бы не снимает... :wink:

_________________
iLavr


01 Oct 2013 12:19
Profile
Banned
User avatar

Joined: 20 Mar 2005 13:41
Posts: 2141
Location: От туда
Reply with quote
Post 
Подчиняясь синдрому утенка я признаю лишь синтаксис ассемблера Микрон.


01 Oct 2013 19:53
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
HardWareMan wrote:
я признаю лишь синтаксис ассемблера Микрон.

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

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

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

Типа:
Code:
   DB   23+45, 4BH-1CH, "THIS IS VERY LONG ASSM STRING", 00H, "_"... и т.д. до 128-го символа...


А в новом пакете "RAMFOS" длину строки ограничили 63-мя символами.

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

Хотя бы для "Микрон" были указаны конкретные стандарты и ограничения - что допускается,
а что и нет?

_________________
iLavr


02 Oct 2013 04:40
Profile
Banned
User avatar

Joined: 20 Mar 2005 13:41
Posts: 2141
Location: От туда
Reply with quote
Post 
Lavr wrote:
Хотя бы для "Микрон" были указаны конкретные стандарты и ограничения - что допускается,
а что и нет?

Так как Микрон на Спеца пришел с РКшки, то читаем исходную литературу:
Attachment:
3439032.png
3439032.png [ 77.6 KiB | Viewed 13182 times ]

Attachment:
3436984.png
3436984.png [ 180.24 KiB | Viewed 13182 times ]

Attachment:
3426744.png
3426744.png [ 64.94 KiB | Viewed 13182 times ]

И далее по тексту. Курить Радио 7'87.


02 Oct 2013 05:00
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
"Прикурю-ка" я сюда из "Радио №5 1993": На смену ассемблеру "Микрон", устаревшему и с известными глюками,
пришел АССЕМБЛЕР «М&S», он постулирует следующие правила в отношении использования арифметических операций:
Quote:
Все возможности АССЕМБЛЕРа «МИКРОН» сохранены и добавлены новые:
- введены операции арифметического деления и умножения, а также арифметические операции с символьно заданными псевдооператором DB байтами (например, DB 'А'+80Н);
- допускаются операции арифметического умножения (*, знаковое) и деление (/, беззнаковое);
- все арифметические операции выполняются последовательно, слева направо, БЕЗ ПРИОРИТЕТА;
- допускается использование арифметических операций с байтом, заданным в символьном виде псевдооператором DB, при этом байт должен быть одиночным (допускается: DB 'TES', ' T'+80H и не допускается: DB 'TEST'+80H);
...
Во всем остальном АССЕМБЛЕР «М&S» полностью совпадает с АССЕМБЛЕРОМ «МИКРОН»...

Значит длина строки всё те же 64 символа...

_________________
iLavr


14 Dec 2015 09:42
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
А я картинки перегрузил прямо сюда чтобы не пропали...

_________________
:dj: https://mastodon.social/@Shaos


14 Dec 2015 10:12
Profile WWW
Doomed
User avatar

Joined: 05 Nov 2007 05:08
Posts: 487
Location: Украина
Reply with quote
I'll be back! (C) - и вот он я ;)

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

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

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

Так что, тестируйте! ;)


04 Feb 2016 03:56
Profile WWW
Maniac

Joined: 18 Nov 2013 15:15
Posts: 209
Location: все оттуда ;)
Reply with quote
Lavr wrote:
Джентльмены, а существует какой-либо стандарт на ассемблер для i8080?

Я рекомнедую это:
http://bitsavers.informatik.uni-stuttgart.de/pdf/intel/ISIS_II/9800292-04D_ISIS_II_8080_8085_Macro_Assembler_Operators_Guide_Aug81.pdf


05 Feb 2016 08:43
Profile
Supreme God
User avatar

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

Что-то я вот это правило как-то не понял... :-?
Quote:
- допускается использование арифметических операций с байтом, заданным в символьном виде псевдооператором DB,
при этом байт должен быть одиночным (допускается: DB 'TES', ' T'+80H и не допускается: DB 'TEST'+80H);

То есть вот так делать нельзя?

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

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

Или в DB можно сложить последний байт строки 'TEST' с 80H == 'T'+80H,
а 'TEST'+80H - вызовет ошибку ?

_________________
iLavr


10 Oct 2018 09:12
Profile
Supreme God
User avatar

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

Ассемблер "Специалиста" не понимает оба этих варианта...
Attachment:
SPASM.gif
SPASM.gif [ 4.29 KiB | Viewed 10512 times ]

Причем несколько странно не понимает:
MVI A,'Y'+1 ; код Z - он понимает
а вот после DB:
DB 'TEX','T'+2,... - это он понимать не захотел... :-?

С константой и адресом такие фокусы получаются, причем адрес обрезается
до байта, и ошибка при этом не генерируется.

_________________
iLavr


10 Oct 2018 11:04
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 11 posts ] 

Who is online

Users browsing this forum: No registered users and 6 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.