Часто позволяющей одной командой сделать то, на что на других процах (включая Z80) уйдёт несколько...
Вид для печати
"Опять! Ну, теперь стало быть, пошло, пропал калабуховский дом." (с) Собачье сердце
Это да, но после простых и понятных записей асма Z80 команды вида MOV 2000(Rx),@#ADR заставляют поднапрячь мозги =)
Особенно если до этого никогда таких адресаций не видел. Тут минимум неделю лазишь в справочник, чтоб не запутаться.
При переходе с высокоуровневого языка оно, конечно, лучше: не нужно расписывать кучу команд для нужного действия.
Уже упомянутый спорный момент о том, какой код в итоге будет быстрее, для начального освоения асма считаю второстепенным.
Но именно на ретрокомпьютерах стоит все же учитывать все нюансы, вплоть до объема программы в (кило)байтах и времени исполнения кода.
Это так, для "широких масс", возможно, читающих данный топик в будущем. Не ленитесь сравнивать и проверять разные варианты кода.
Мне уже достаточно давно интересно - с каких времен необходимость - поднапрячь мозги - у программистов стала вызывать такое неприятие?
И что, на этапе освоения
это прям такой неподъёмный срок?
И я просто молчу, сколько по времени надо лазить в справочник при освоение x86 даже в варианте 8086/8088.
А так же вспоминаю, что в своё время пришлось выписать ВСЕ варианты допустимого использования в командах регистров на 8080
Ну и для разминки мозгов - кусок кода, написанный на языке MACRO-11
Честно говоря - надо бы его переписать - ибо жутко медленный, но пока не парит :)Код:;
; R2 R3
;
PROCEDURE CNV
BEGIN
LET R0 := #BUF
THRU R4 := #EBUF-BUF
LET (R0)+ :B= #SPACE
END
LET -(SP) := #4
LOOP
LET R4 := #0
LET R5 := #0
LOOP
IF R2 EQ #0 AND R3 LO R1 LEAVE LOOP
ADD #1, R5
ADC R4
SUB R1, R3
SBC R2
END
LET (SP) := (SP) - #1
IF RESULT IS EQ THEN
LET -(R0) :B= #SPACE
LET (SP) := #3
END
LET -(R0) :B= R3
LET (R0) :B= (R0) SET.BY #'0
LET R2 := R4
LET R3 := R5
IF R2 EQ #0 AND R3 EQ #0 LEAVE LOOP
END
POP
RETURN
END CNV
Ну не знаю. По мне всё просто и понятно, запутываться просто негде. Особенно, если знаешь, как эти команды кодируются. Это на Z80 надо запоминать, почему нельзя сделать LD IX, HL, и надо перепихивать через стек.
А вообще, если кто хочет действительно крышесносящего ассемблера, то вот вам PIC:
Что делает эта программа?Код:MOVLW 2H
MOVWF 3H
MOVLW 4H
ADDWF 3H, 0
В регистр W заносится число 6. В регистре STATUS устанавливаются флаги Z и DC.
Но, наверное, что-то еще происходит, да ?
Ну МАКРО это не аргумент! Понятно, что на МАКРО любой начинающий без напряга напишет, особенно имея под рукой примеры.
А вообще любой язык, язык программирования в том числе, для освоения требует практики. Аргумент против восьмеричной системы это не аргумент! Это ж не 32-ричная и не двоичная системы. И не китайский язык!
По поводу желания запускать программы на реальном железе это конечно похвально, только требует немалых финансовых затрат.
Воспроизводить то же PDP-8 на транзисторах с ферритовой памятью в единичном экземпляре тут даже миллиона долларов не хватит. Да и смысл? Разве что в музее где-то сидеть за пишущей машинкой Консул, привлекая внимание публики, любящей острые ощущения. Набивать перфокарты и вводить код с них есть желающие?
Также можно писать для радио-86рк совместимых компьютеров. Они достаточно просто устроены, и ассемблер простой. А потом перейти уже на z80, потому что z80 это расширенная версия 8080.
Даже независимо от юзаемой ретро-платформы я рекомендую использовать именно кросс-компиляторы и писать на Си со встроенным асмом. Какие-то зачатки асма всё равно понадобятся, это будет неплохой старт в асм, а уверенно писать на асме целиком Вы сможете не раньше, чем через год или несколько. И то в случае почти ежедневной практики. Я знаю 8080 и Z80 довольно хорошо, но на PDP-11 до сих пор пишу очень неуверенно.
Итак. Для PDP-11 есть порт GCC (MINGW). Там, правда, есть некоторые трудности, но уж что поделать, привыкайте, это ретро.
https://www.1801bm1.com/files/pdp11/cross-compilers/
Для Z80 лучше всего взять SDCC: http://sdcc.sourceforge.net
Для 8080 берём z88dk: https://z88dk.org
По тонкостям всех этих компиляторов есть гуры. Лучше всего иметь такого гуру под боком, чтобы задавать ему тонну глупых вопросов.
Да, кстати, я освоил все эти компили и использую их в качестве бэк-эндов при написании программ для ретро-платформ на Обероне (через трансляцию в Си).
Почему я сразу говорю про гур. Потому что кроме компиляторов понадобятся утилиты, библиотеки, подпрограммы на ассемблере, приёмы их стыковки к Си-коду. И да, не слушайте "ассемблерщиков". Это профи, они хотят выжимать из ретро-машинок их максимум. Ваша же задача другая - вообще понять что к чему и сделать хоть что-то. А там дальше талант-упорство-мотивация покажут. Может вообще не понравится, слишком заморочливо.