Zx Asm - Rulez!

ZXNet эхоконференция «zx.spectrum»

От Andrew MOA Кому All 25.06.1997


В день 19 Jun 97 Michael Kondratyev имел счастье писать к Andrew MOA:

AM>> Ассемблер, конечно, может отделять константы, контсанты-метки от
AM>> констант-адресов, но наглядность при этом сильно проигрывает.
MK> ну такой вот подаpок от zilog достался ;(

Hет, не греши на Zilog, это не их идея. А вот ассемблер -- микрософтовский, и
они в нем ничего не сделали, что бы отделить "мнемоническую" скобку от скобки
"выраженческой".

MK> Macro Assembler-80 v2.08D (c) 1995,1996,1997 MOA Page 1
MK> 0000' 3A 0009 ld a, (1+2)*3

Из ненаписанной еще документации:
для выделения выражения используйте незначащий плюс, например,
ld a, +(1+2)*3

Andrew


От George Shepelev Кому All 28.06.1997

Hallo Andrew!

Среда 25 Июня 1997 04:52, Andrew MOA wrote to Andrey Mihaylow:


AM> В принципе, каждый символ (метка) в ассемблере имеет свой тип (если
AM> он не имеет типа -- занчит тип один на всех :)

AM> ;абстрактый пример

Если можно, я буду иллюстрировать пример в синтаксисе TASM от фирмы Borland.
Это правда 80x86 а не Z80, но там много чего умного придумано (правда местами
коряво реализовано). Эти идеи неплохо прилагаются к произвольному ассемблеру.
В основном это для тех, кто слабо представляет себе не-Z80 ассемблеры...

AM> const equ 1 ;константа

Константа строкового типа. Hе совсем то-же, что const = 1

AM> met: ;метка (т. е. ссылка на конкретный адрес)

Hе просто метка, а метка исполнимого кода. При "нормальной" проверке соответ-
ствия типов можно организовать переход или вызов, пользуясь этой меткой, но
нельзя произвести запись/чтение, ссылаясь на эту метку...

AM> label met1 ;тоже метка (т. е. обявили тип символа)

Это хитрая метка! Которой не соответствует определённый тип - может служить
адресом как кода, так и неопределённой структуры данных...

AM> proc met2 ;можно и так объявить -- не суть

Метка исполнимого кода. При таком типе объявления можно ещё и дополнительные
параметры указать (ближний/дальний код, номер страницы памяти или ещё что...)

AM> byte db 0 ;это ссылка на байт

Метка структуры данных с размерностью байт. Можно производить байтовые за-
пись/чтение с использованием этого адреса.

AM> word dw 0 ;это ссылка на слово

Метка структуры данных с размерностью слова. Для пословных записи/чтения...

AM> st struct ;ссылка на структуру, и так далее

Метка структуры данных. Размерность полей описывается отдельно...

AM> В таком случае -- при ассемблировании команды можно организовать
AM> проверку типов.

И успешно ловить зевки программиста ещё на стадии разбора синтаксиса исход-
ного текста, не доводя дело до компиляции и тем более запуска программы. За
что мне и нравятся ассемблеры с мощными средствами проверок и не нравится C,
который молча "сожрёт" любой мусор в качестве исходника... Выдав бред в ка-
честве исполнимого кода...


George


От Andrew MOA Кому All 02.07.1997


В день 28 Jun 97 George Shepelev имел счастье писать к All:

AM>> ;абстрактый пример
GS> Если можно, я буду иллюстрировать пример в синтаксисе TASM от фирмы
GS> Borland.

Hаверное, можно, а что?
{skipped}

GS> За что мне и нравятся ассемблеры с мощными средствами проверок
GS> и не нравится C, который молча "сожрёт" любой мусор в качестве
GS> исходника...

не надо отключать выдачу предупреждений.

Andrew


От Andrew MOA Кому All 02.07.1997


В день 29 Jun 97 Michael Kondratyev имел счастье писать к Andrew MOA:

AM>> ld a, +(1+2)*3
MK> и тепеpь паpслов об усилиях (какими мне они видятся):

скорее всего, что бы не ухудшать читаемость:

MK> (1+2)*3 - константа,

ошибка

MK> ((1+2)*3) - адpес

адрес
ну, и остается +(...

Andrew


От George Shepelev Кому All 09.07.1997

AM> не надо отключать выдачу предупреждений.

Во многих случаях это не поможет. Он будет интерпретировать мусор в соот-
ветствии с маловразумительными идеями разработчиков компилятора... Сишные
баги были заложены ещё при разработке синтаксиса этого языка. Стандартом не
предусматривался порядок вычисления аргументов функций. Имеются многочислен-
ные машиннозависимые побочные эффекты...
В результате авторы языка давали советы типа "если строчка программы не
содержит формальных ошибок но непонятно что же будет сделано, скомпилируйте
её и посмотрите результат". Понятно что на разных компиляторах результат мог
оказаться совершенно разным...
Так что весь вопрос что же лучше, "умный" компилятор, или полностью доку-
ментированный язык программирования... ;)


George