Ну что, вроде ожили? Чего было-то? Форум в воскресенье висел или лежал?
Пардон, месье, я вижу — Вы в нашем деле новичок и ещё не успели познать всю радость извращений!А что Вы скажете на пару_строк кода 8080?:
Как Вы думаете, куда будет передано управление по метке error и какой такой метод адресации использован в команде по метке noerror?Код:error EQU noerror+1 noerror: CPI 37h RET
Правда, у 80-го процессора есть однобайтные команды условного возврата из подпрограмм, так что ему будет дешевле написать условный возврат, нежели вышеприведённый код. А с вызовом подпрограмм уже не так: у 11-го процессора вызов занимает 4 байта, а у 8080 — три, что, казалось бы, даёт ему экономию кода в 25%. Но!!! Вы верно заметили про "такие методы адресации"! В 11-м процессоре есть такие методы адресации, которые требуют при вызове подпрограммы всего 2-х байтов кода, так что при их использовании 8080 уже отстаёт по краткости кода, причём на 33%. Однако и это не всё!
Практическая польза при программировании в среде RT-11 на ассемблере заключается в возможности вызовов подпрограмм вообще без команд вызова подпрограмм, а просто по именам! Вот пример такого кода, который типа печатает на экране результат А*В+D/F:
Где-то поодаль находятся коды подпрограмм F_MUL, F_DIV, F_ADD (она же F_SUB) и F_TYPE, а также переменные.Код:F_MUL А, В, С ; вызов подпрограммы умножения А и В с занесением результата в С F_DIV D, E, F ; вызов подпрограммы деления D на E с занесением результата в F F_ADD C, F, G ; вызов подпрограммы сложения C и F с занесением результата в G F_TYPE G ; вызов подпрограммы печати G на экране
Программистская фишка здесь заключается в настройке регистра (например, R4) на начало такого блока "данных" и завершении каждой из подпрограмм командой не RET, a JMP @(R4)+, так что указанный регистр выполняет функцию как бы счётчика команд, если считать F_MUL (и прочие) командами, а не именами подпрограмм. Но поскольку и эти "команды", и данные к ним находятся вперемежку, то этот же регистр выполняет функцию и как бы указателя стека, только растущего не вниз, а вверх, как и счётчик команд. Как Вам, месье, понравится такое извращение?
На самом деле я всего лишь привёл упрощённый пример куска фортрановского кода от RT11, который, впрочем, без упрощений не стеснялся применять и в своих ассемблерных программах. Понятно, что в вычислительных задачах количество вызовов наиболее ходовых подпрограмм (+, -, * и /, а также присвоения и преобразования данных) столь велико, что экономия по одному слову памяти на каждый вызов, а, главное, экономия времени от неиспользования обычного стека (как это было бы при обычных вызовах CALL) получается весьма заметной.





А что Вы скажете на пару_строк кода 8080?:
Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 
