Определение адресации, размера инструкции, размера кода операции. (LC-3)

Так что в этом классе мы много имеем дело с языком ассемблера LC-3. Для задач на одном из наших домашних заданий нам дают это:

"Предположим, у нас есть 16 регистров общего назначения, 60 кодов операций, размер команды 20 битов и 64 Кбайт доступного пространства памяти. A) Если нам нужна команда LD DR, смещение, сколько бит доступно для смещения?"

Как мне найти это? В классе мы работаем с LC-3, который, как я уже знаю, имеет размер инструкции 16 бит, где коды операций - 4 бита, ячейки памяти - 3 бита (R0 - R7), и смещение может быть вычислено. Мы никогда не учились, как рассчитывать их самостоятельно... Так что я понятия не имею, как выяснить, как долго будут коды операций для инструкций на этом языке с размером инструкций 20 бит или даже сколько битов места памяти есть. Может кто-нибудь, пожалуйста, помогите?

1 ответ

"Предположим, у нас есть 16 регистров общего назначения, 60 кодов операций, размер команды 20 битов и 64 Кбайт доступного пространства памяти. A) Если нам нужна команда LD DR, смещение, сколько бит доступно для смещения?"
Как мне найти это?

Давайте разберемся с этим:

LDR    DR,    offset
^      ^      
|      general-purpose register
opcode

Вопрос говорит о том, что есть 60 возможных кодов операций, поэтому вам нужно ceil(log2(60)) == 6 бит, чтобы иметь возможность кодировать все возможные коды операций.
Затем говорится, что есть 16 GPR, и вам нужно ceil(log2(16))== 4 бита, чтобы иметь возможность кодировать использование любого из них.

После использования 6 + 4 == 10 битов для кода операции и GPR у нас остается 10 битов для кодирования чего-либо еще. В данном конкретном случае "что-нибудь еще" представляется просто смещением, поэтому у вас есть 10 битов, доступных для смещения.

Другие вопросы по тегам