Задать вопрос
@SergeySerge11

Как в конвейерном 32bit процессоре передается команды записи в Reg 32 Битного значения??

MOV AX, 0B8000000h

Как реализуется такая команда. К примеру. Все не пойму.
Везде указано примерно так, что есть вот такой перечень инструкций
[instruction] {15 бит}
[reg1]{5бит}
[reg2] {5бит}
[reg3] {5бит}
// или там вместо 2-3 регистров 10-14 байт IMM значение.
А как передать-то 32 битное значение в команде в 32 бит?
Логично что после команды значение(или адрес). Но тогда же получается какое-то нарушение логики.
1.Получение (англ. Fetch)
2.Раскодирование (англ. Decode)
3.Выполнение (англ. Execute)
4. Запись результата (англ. Write-bac)
ПРИМЕР
MOV AX, 0B8000000h     ;/// КАКАЯ Длинна этой команды
Add AX, 0b0000333h      ;

Во 2 Этапе, идет получение адреса 1 этапа для 2 команды, а при этом еще идет декодирование 1 команды, которая по логике должна быть 64 байта =32 байт команды и 32 байт значения.
Но в этот же самый момент где число 0B000080h берется ошибочно, как следующая инструкция. Чего мне не хотелось бы.

Короче, не понимаю этот момент. В чем ошибка, или как это реализуется.
  • Вопрос задан
  • 55 просмотров
Подписаться 1 Средний 3 комментария
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
А как передать-то 32 битное значение в команде в 32 бит?
Логично что после команды значение(или адрес). Но тогда же получается какое-то нарушение логики.

В RISC-процессорах -- никак. Они либо имеют команду загрузки 32-битного значения (литерала) из памяти относительно PC или специально выделенного регистра (например ARM: LDR r [pc, #offset_to_literal_pool], XTENSA: l32r at, label), при этом в команде кодируется смещение адреса литерала относительно PC. Либо загружают значения по частям, двумя или более командами (например MIPS загружает 16-битные части двумя разными инструкциями: lui rt, high16 ; ori rt, low16, XTENSA загружает 16-битные части двумя одинаковыми инструкциями: CONST16 at, high16 ; CONST16 at, low16, RISC-V загружает 20 и 12-битные части: auipc rd, symbol[31:12] ;addi rd, rd, symbol[11:0]).
Хотя в принципе тот же RISC-V имеет нефиксированную длину команд, так, что какой-нибудь разработчик может завести, скажем, 6-байтовую команду загрузки 32-битного непосредственного значения в регистр, однако, насколько мне известно, никто этого не делает.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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