Задать вопрос
@Oghuzkhan2020
Никто

Как процессор распознает длину команды?

Всем привет. Прошу помочь. Хочу понять суть работы процессора. В книге Петцолда К.О.Д. имеется текст:
В компьютере из главы 17 все команды (кроме Остановить)занимали по 3 байта — код операции и двухбайтовый адрес.В процессоре 8080 команды бывают длиной в 1, 2 и 3 байта.Не-которые команды указывают процессору прочитать байт из определенной ячейки памяти, другие — записать байт в опре-деленную ячейку памяти, третьи — произвести какие-то внут-ренние операции, не обращаясь к оперативной памяти.Вы-полнив первую команду, процессор считывает из памяти сле-дующую и т.д.Взятые вместе, эти команды представляют со-бой компьютерную программу, цель которой — заставитьпроцессор что-то сделать.
Вопросы:
1.Как я понял, длина команды разные. Тогда как процессор может отличить длину команды (1, 2, и 3 байт), чтобы выполнить следующую команду ?
2. Почему кроме команды Остановить все команды занимают 3 байта?
3. Как происходить выборка команды? Как найти логическую схему выборки команды?
p.s. У меня плохой русский язык. В тексте может быть орфографические ошибки. Заранее извиняюсь))
  • Вопрос задан
  • 658 просмотров
Подписаться 4 Средний Комментировать
Решения вопроса 1
@d-stream
Готовые решения - не подаю, но...
Самое простое для понимания:
например два самых старших бита кода команды определяют ее длину
соответственно команды
от 0000000 до 00111111 - будут однобайтовыми
от 0100000 до 01111111 - будут двухбайтовыми
от 1000000 до 10111111 - будут трехбайтовыми
от 1100000 до 11111111 - будут четырехбайтовыми

Но это не для 8080. Просто для понимания общего смысла.

А так - на структуре процессора видимо попадался элемент "дешифратор команд" - собственно это его задача понять по коду команды, что означают последующие байты.

2. Однобайтных команд у 8080 больше одной. Навскидку: NOP, HALT, INT3. RET*, сдвиги, обмен между регистрами

3. если говорить о 8080 - то удобнее и понятнее даже не логически, а схемотехнически... а так - один из источников
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
saboteur_kiev
@saboteur_kiev
software engineer
процессор 8080 было восьмибитным.
То есть он за один такт обрабатывал одну команду из одного байта, затем уже можно было понять как обрабатывать два последующих байта.
Для таких вещей существует внутренний декодер.
Раньше был просто специальный регистр (OPCODE), в который помещался первый байт инструкции и процессор декодируя его обрабатывал следующие байты уже согласно этой инструкции
7tw6E.gif
Ответ написан
Комментировать
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
как процессор может отличить длину команды (1, 2, и 3 байт), чтобы выполнить следующую команду ?

По коду операции -- части команды, которая кодирует действие команды. В процессоре закодировано соответствие кода операции и длины команды. Код операции может полностью содержаться в первом байте команды (как в 8080), либо может быть распределён между несколькими байтами команды. В последнем случае часть кода операции находящаяся в первом байте должна отличаться от кода операции любой однобайтовой команды чтобы их можно было отличить.

Почему кроме команды Остановить все команды занимают 3 байта?

Если речь о 8080, то это утверждение неверно. В 8080 есть несколько однобайтовых команд (nop, битовые сдвиги и вращения, push/pop, и т.д.), несколько двухбайтовых (mvi и арифметика с непосредственными значениями -- adi, aci, и т.д.) и несколько трёхбайтовых (команды с прямой адресацией -- lda, sta, и т.д., переходы, вызовы подпрограмм и т.д.). Потому что значения, с которыми оперируют команды находятся в байтах следующих за первым -- в одном, если нужен 1-байтовый операнд и в двух если нужен 2-байтовый операнд или адрес.

Как происходить выборка команды? Как найти логическую схему выборки команды?

Можно посмотреть в исходники отреверсированного 8080.
Ответ написан
Комментировать
begemot_sun
@begemot_sun
Программист в душе.
Первый байт показывает какая это команда, или тип команды. Далее идет логика которая отрабатывает либо эту конкретную однобайтовую команду, либо осуществляет чтение следующих байт для конкретизации команды дальше. Т.о. как только процессору (с помощью дешифратора команд) становится понятно что за команда, он ей выполняет -- дает ток нужным элементам в нужном направлении.
Ответ написан
Комментировать
ProgrammerForever
@ProgrammerForever
Учитель, автоэлектрик, программист, музыкант
Один из вариантов написали выше - кодировать длину в отдельных битах. А можно ещё использовать префиксный код
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы