PC-01 Lviv

It is currently 28 Mar 2024, 12:35

Forum Games WEB Tape Loader Twitter RSS

All times are UTC+03:00




Post new topic  Reply to topic  [ 215 posts ]  Go to page Previous 111 12 13 14 15
Author Message
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 17 Sep 2013, 07:35 
Offline

Joined: 20 Apr 2012, 16:00
Posts: 372
Location: Конотоп
Вопрос по Асму.
Proc1:
…....
PopB
…....
Ret


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

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

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

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


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 17 Sep 2013, 09:06 
Offline

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


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 17 Sep 2013, 10:20 
Offline

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

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


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

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

Спасибо!


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 17 Sep 2013, 13:41 
Offline

Joined: 29 Mar 2012, 21:35
Posts: 115
Quote:
Я правильно понимаю?
Надеюсь, что да :)


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 11 Aug 2020, 21:26 
Offline

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

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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 215 posts ]  Go to page Previous 111 12 13 14 15

Forum Games WEB Tape Loader Twitter RSS

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
cron
Powered by phpBB® Forum Software © phpBB Limited