Запустить 8086 в минимальной обвязке?

8-битные микроконтроллеры и микропроцессоры от Intel и их клоны, а также компьютеры на них построенные

Moderator: Shaos

petrenko
Doomed
Posts: 598
Joined: 10 Mar 2012 16:21
Location: РФ

Post by petrenko »

Lavr wrote:...Любая команда, во время которой возникло прерывание, сначала заканчивается;...
Уточним : сие справедливо только для данного процессора. ( В том же VAX-е команда может прерваться и возврат произойдёт в ту же фазу изполнения команды, где она прервалась. )

Да и то - не совсем уверен в случае команды с префиксом REP ... Кто уточнит ?
User avatar
Lavr
Supreme God
Posts: 16687
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

petrenko wrote:
Lavr wrote:...Любая команда, во время которой возникло прерывание, сначала заканчивается;...
Уточним : сие справедливо только для данного процессора. ( В том же VAX-е команда может
прерваться и возврат произойдёт в ту же фазу изполнения команды, где она прервалась. )
Я пишу в ветку "Запустить 8086 в минимальной обвязке?"...
Тут где-либо написано "Запустить VAX в минимальной обвязке?".
Это я тоже уточнил...

Не надо оффтопить не по делу - откройте веточку про VAX и проявите
свою эрудицию - возможно, сие будет нам интересным.
iLavr
petrenko
Doomed
Posts: 598
Joined: 10 Mar 2012 16:21
Location: РФ

Post by petrenko »

Вакс упомянут для примера и в скобочках.

А так я строго по теме - прошу уточнить насчёт команд с префиксом REP - прерываются они или пока всю цепочку ( хоть до 65535 байт ) не обработают - не прервутся ?

В том числе "в минимальной обвязке". :D
User avatar
VituZz
God
Posts: 1343
Joined: 13 Nov 2010 04:06

Post by VituZz »

Lavr wrote:
VituZz wrote:Мне кажется странным такое поведение, когда действие HLT может быть отменено прерыванием после его завершения.
Странным, не странным, но поведение такое, как есть, по логике работы процессора.
Смысл фразы до конца я не очень понял, но никто и не в каких мануалах не обещал
же "вечный HLT" ?
Встретив HLT, процессор переходит в состояние останова. После возникновения прерывания выполняется ПП его обработки, а после IRET восстанавливается CS:IP, но процессор должен и далее стоять, а не продолжить работу с команды после HLT. Может, наш коллега newold86 в конце прерывания поставил RET вместо IRET? Или я всё же неправильно понимаю работу проца?
newold86 wrote:У меня оно возникает при обращении к определенному порту, но это обращение в программе находится ПОСЛЕ команды HLT, т.е. до обращения (и, соответственно, прерывания) доходить не должно...
User avatar
Lavr
Supreme God
Posts: 16687
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

VituZz wrote:Встретив HLT, процессор переходит в состояние останова. После возникновения прерывания выполняется ПП его обработки, а после IRET восстанавливается CS:IP (указывающий на команду, следующую за HLT), но процессор должен и далее стоять?, а не продолжить работу с команды после HLT.
НЕ ДОЛЖЕН! Уже 2 раза написали я и newold86, что процессор после IRET начинает
работу с восстановленного из стека CS:IP, указывающего на команду, следующую за HLT.
Т.е. продолжить работу с команды после HLT.

Во всех мануалах написано, что RESET, NMI, INTR выводят процессор из состояния HLT!
Если снова нужен HLT, делают:
Lavr wrote:jmp обратно на hlt, чтобы процессор смог "вздремнуть на том же месте, где и был".
iLavr
User avatar
VituZz
God
Posts: 1343
Joined: 13 Nov 2010 04:06

Post by VituZz »

Но какой смысл в таком поведении процессора? Получается, что полноценный HLT - это HLT + JMP назад на HLT? Я никогда не пользовался этой командой, но почему-то всегда считал, что после HLT возможно выполнение только ПП прерываний, но не продолжение выполнения кода основной программы.

А ВМ80 тоже так себя ведёт?
User avatar
Lavr
Supreme God
Posts: 16687
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

VituZz wrote:Но какой смысл в таком поведении процессора? Получается, что полноценный HLT - это HLT + JMP назад на HLT? Я никогда не пользовался этой командой, но почему-то всегда считал, что после HLT возможно выполнение только ПП прерываний, но не продолжение выполнения кода основной программы.

А ВМ80 тоже так себя ведёт?
Да - ВМ80 тоже так себя ведёт. HLT для нас непривычная команда, т.к. мы привыкли к возвратам в Монитор.

HLT раньше активно юзали во всяких ранних компьютерах - когда программу надо завершить,
а передать управление некуда.

Ты просто сложил для себя неправильный имидж "полноценного HLT", а настоящий HLT - вот таков,
каков он есть. Я же сказал уже ранее - это не "вечный HLT". :wink:

И - да: после HLT возможно продолжение выполнения кода основной программы.

Просто команда HLT работает в общей логике процессора: прерывание, возникшее во время
исполнения команды корректно вернет управление на адрес, следующий за этой командой.
И для команды HLT исключения из этого правила не сделали.
iLavr
jdigreze
God
Posts: 1388
Joined: 02 Jan 2006 02:28
Location: Abakan

Post by jdigreze »

Не скажу, опять же, за интел, но в z80 это объясняется просто - HALT помимо самого ожидания выставляет сигнал на ногу, типа "я готов, можете меня прерывать". Есть стойкое подозрение, что у интелов также. Особенно с учётом того, что часть команды разрабов "8080" и делала z80
User avatar
Lavr
Supreme God
Posts: 16687
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

jdigreze wrote:Не скажу, опять же, за интел, но в z80 это объясняется просто - HALT помимо самого ожидания выставляет сигнал на ногу, типа "я готов, можете меня прерывать". Есть стойкое подозрение, что у интелов также.
Ну так для того они и совместимы! z80 просто идеологически не может поступать иначе!
В плане идентичности i8080 у z80 есть совсем маленькое отличие, по которому его можно
определить программно.

Но об этом писАли и в "Радио", в цикле статей про "Орион-128", и мы обсуждали в рамках
этого форума. И это отличие вовсе не в HALT... :wink:
iLavr
aviator
Maniac
Posts: 292
Joined: 10 Dec 2008 08:39
Location: Стокгольм, Швеция

Post by aviator »

VituZz wrote:Но какой смысл в таком поведении процессора? Получается, что полноценный HLT - это HLT + JMP назад на HLT? Я никогда не пользовался этой командой, но почему-то всегда считал, что после HLT возможно выполнение только ПП прерываний, но не продолжение выполнения кода основной программы.

А ВМ80 тоже так себя ведёт?

Code: Select all

DI
HLT
Можно и так.
С уважением, Сергей.
User avatar
Lavr
Supreme God
Posts: 16687
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

VituZz wrote:
aviator wrote:А ВМ80 тоже так себя ведёт?

Code: Select all

DI
HLT
Можно и так.
Ну это будет тогда, как в анекдоте про слона и зайца:
- Кайф?
- Вечный кайф! (HLT) :D
iLavr
jdigreze
God
Posts: 1388
Joined: 02 Jan 2006 02:28
Location: Abakan

Post by jdigreze »

Lavr wrote:
VituZz wrote:
aviator wrote:А ВМ80 тоже так себя ведёт?

Code: Select all

DI
HLT
Можно и так.
Ну это будет тогда, как в анекдоте про слона и зайца:
- Кайф?
- Вечный кайф! (HLT) :D
1. RESET ("слонобойка" 12,7мм)
2. NMI (принудительное оттягивание хобота :lol: )
jdigreze
God
Posts: 1388
Joined: 02 Jan 2006 02:28
Location: Abakan

Post by jdigreze »

---задублировалось---
User avatar
Lavr
Supreme God
Posts: 16687
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

jdigreze wrote:2. NMI (принудительное оттягивание хобота :lol: )
А у ВМ80 уже таки есть NMI? :o Я, видимо, что-то пропустил в этой жизни... :-?
iLavr
jdigreze
God
Posts: 1388
Joined: 02 Jan 2006 02:28
Location: Abakan

Post by jdigreze »

Простите! Зарапортовался ;)