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