Определение адресации, размера инструкции, размера кода операции. (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 битов, доступных для смещения.