Здесь принимаются все самые невообразимые вопросы... Главное - не стесняйтесь. Поверьте, у нас поначалу вопросы были еще глупее :)
Ответить

Команды out (z80) и sta (6502)

Пн июл 19, 2021 04:54:11

Здравствуйте, я никак не могу разобраться с этими командами, они устанавливают адресную шину в определённое значение и записывают по нему, но как они узнают по какому адресу им надо вернуться. Сначала я думал что они пишут в стек, но оказалось нет.

Re: Команды out (z80) и sta (6502)

Пн июл 19, 2021 07:19:12

программа тупо шагает по счётчику команд, а не по состояниям шин (поэтому "возвращаться" ей никуда не надо)... если нет команды перехода, которая изменит значение счётчика команд....

Re: Команды out (z80) и sta (6502)

Пн июл 19, 2021 09:55:06

Про 6502 ничего не знаю, зато могу написать про Z80. Команда OUT нужна для управления внешними устройствами. Она записывает значение из регистра в порт. Порты – это как память, но находятся в отдельном адресном пространстве. То есть по одному адресу можно попасть в два разных места. Когда процессор хочет обратиться к памяти, то он выставляет управляющий сигнал /MREQ (memory request), а когда к порту – сигнал /IORQ (input/output request). Таким образом внешняя логика узнает, что ей нужно подключить к шине данных – память или внешнее устройство.
У Z80 два вида команды OUT. Одна позволяет обратиться к любому порту по 16-разрядному адресу в регистровой паре BC. Вторая унаследована от процессора 8080 и обращается к порту по младшим 8 разрядам, при этом на старший байт адресной шины выставляется содержимое аккумулятора. В 8080 было всего 256 портов, поэтому там эта команда просто выставляла на адресную шину два одинаковых адресных байта. Этим активно пользовались для обращения к периферии в некоторых компах (РК86), где внешняя логика не различала пространство памяти и портов между собой.
Зато в 8080 можно было дешифровать статусный байт во время сигнала SYNC и узнать, что процессор хочет обратиться к стеку. Теоретически так можно было сделать отдельные изолированные 64 кБ памяти для стека. Применялось ли это где-то на практике – не знаю.

Re: Команды out (z80) и sta (6502)

Пн июл 19, 2021 10:02:13

Команды ввода-вывода выставляют свой адрес только на момент обращения к адресуемому устройству.
Т.е. сначала на шине адрес команды, МП ее считывает
затем выставляет соответствующий адрес устройства и производит обращение к устройству
а далее снова следует обращение к следующей команде согласно содержимого счетчика команд.
Никаких "сохранений".
8)
Ответить