ПК-01 ЛЬВОВ

форум о ПК-01,02 "Львов"
Текущее время: 30 сен 2020, 08:20

Forum Games WEB Tape Loader Twitter RSS

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 215 сообщений ]  На страницу Пред. 111 12 13 14 15
Автор Сообщение
 Заголовок сообщения: Re: DprToLvt (PasToLvt)
СообщениеДобавлено: 17 сен 2013, 07:35 
Не в сети

Зарегистрирован: 20 апр 2012, 16:00
Сообщения: 372
Откуда: Конотоп
Вопрос по Асму.
Proc1:
…....
PopB
…....
Ret


Start Program:
…........
PushbB
Call proc1
…...

будет работать также как
PushbB
PopB
в одной процедуре(программе)?..

либо значение B будет портиться вызовом Call который вроде же пишет в стек адрес возврата?
З.ы. Просто у меня в модуле с этим по-другому, вот интересует...

2. Подскажите простейший код как на асме эффективно реализовывается CASE OF.


Вернуться к началу
 Заголовок сообщения: Re: DprToLvt (PasToLvt)
СообщениеДобавлено: 17 сен 2013, 09:06 
Не в сети

Зарегистрирован: 29 мар 2012, 21:35
Сообщения: 115
Цитата:
будет работать также как
PushbB
PopB
в одной процедуре(программе)?..
Нет конечно-же. PUSH B / RET отправит процессор по адресу в регистре BC.
Цитата:
либо значение B будет портиться вызовом Call который вроде же пишет в стек адрес возврата?
POP B, если ничего не положить в стек, вытащит адрес возврата из процедуры в регистр BC.
Цитата:
2. Подскажите простейший код как на асме эффективно реализовывается CASE OF.
Простейший:
CPI Value1
JNZ Next1
...
JMP EndOfCase
Next1:
CPI Value2
JNZ Next2
...
Но он не самый компактный, и не самый быстрый, если много альтернатив.
Быстрее и компактнее делать при помощи процедуры бинарного поиска по таблице (значение-адрес), которую обычно размещают после вызова этой процедуры.


Вернуться к началу
 Заголовок сообщения: Re: DprToLvt (PasToLvt)
СообщениеДобавлено: 17 сен 2013, 10:20 
Не в сети

Зарегистрирован: 20 апр 2012, 16:00
Сообщения: 372
Откуда: Конотоп
Цитата:
Нет конечно-же. PUSH B / RET отправит процессор по адресу в регистре BC.
Спасибо!
Т.е. другими словами правильно делать так?:

m1:
.......
PushB
.......
PushD
.......
PopD;
PopB;
Ret


StartProrgam:
.......
PushB
.......
Call m1
.......
PopB;
.......

Главное что-бы и Pop и Push не "переламовало" вызовом Call и Ret?!... Я правильно понимаю?
С безусловными переходами(JNZ, JZ,JMP) такого нет? Я правильно понимаю?
При Push содержимое регистровой пары не меняется?! Я правильно понимаю?
Всякие там переполнения стека меня как новичка ещё не скоро каснётся?! Я правильно понимаю?
Цитата:
....Быстрее и компактнее делать при помощи процедуры бинарного поиска по таблице (значение-адрес), которую обычно размещают после вызова этой процедуры.
Ой!... :-) Это пока не для меня такое :-)воспользуюсь простейшим способом.

Спасибо!


Вернуться к началу
 Заголовок сообщения: Re: DprToLvt (PasToLvt)
СообщениеДобавлено: 17 сен 2013, 13:41 
Не в сети

Зарегистрирован: 29 мар 2012, 21:35
Сообщения: 115
Цитата:
Я правильно понимаю?
Надеюсь, что да :)


Вернуться к началу
 Заголовок сообщения: Re: DprToLvt (PasToLvt)
СообщениеДобавлено: 11 авг 2020, 21:26 
Не в сети

Зарегистрирован: 07 дек 2010, 16:54
Сообщения: 225
Цитата:
2. Подскажите простейший код как на асме эффективно реализовывается CASE OF.
Никак, это очень сложный оператор и простейших решений нет.
Если количество вариантов мало и они сильно разрежены, то могут скомпилировать линейную последовательность сравнений с условными переходами.
Если количество вариантов велико и они сильно разрежены, то компилируют дерево двоичного поиска на серии сравнений и условных переходов.
Если вне зависимости от количества вариантов они компактны, то компилируют таблицу подстановки (которую разыменовывают исходным значением, использую его как индекс).
И, наконец, для смешанного варианта очень большого переключателя применяются все 3 способа, когда исходный переключатель разбивают на подблоки и к каждому подблоку применяют свою стратегию реализации. Плюс по каждому варианту могут быть разные способы реализации, т.к. при компиляции будут доступны в каждом случае разные свободные регистры (для неортогональной системы команд) и могут быть разные требования к памяти и коду (например, избыток памяти данных или избыток памяти кода). Вплоть до компиляции обычного вызовы процедуры с параметрами.

Не удивлюсь, если там экспоненциальная сложность (оптимизация двоичных выражений во всяком случае такой точно является).
По крайней мере, я умудрялся завешивать компилятор Си++, когда генерировал ему на вход свой код (используя Си в качестве эдакого ассемблера для реализации своей системы).


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 215 сообщений ]  На страницу Пред. 111 12 13 14 15

Forum Games WEB Tape Loader Twitter RSS

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB