你好,我不知道為什么在添加指令中我需要,到 7 時,這是添加指令的 cpp 代碼
uint16_t dr = (instr >> 9) & 0b111;
uint16_t sr1 = (instr >> 6) & 0b111;
uint16_t sr2 = instr & 0b111;
uint16_t second = registers[sr2];
uint16_t immediateFlag = (instr >> 5) & 0b1;
if (immediateFlag) {
uint16_t imm5 = instr & 0b11111;
second = signExtend(imm5, 5);
}
registers[dr] = registers[sr1] second;
所有的行和 7 是我沒有得到的部分。這是指令的樣子:
- 位 15-12 操作碼(0001)
- 位 11-9 目標暫存器
- 位 8-6 源 1
- 位 5 0 或 1(立即模式)
- 位 4-3 沒有
- 位 2-0 源 2
這個 0b111(十進制 7)是如何起作用的,為什么?
uj5u.com熱心網友回復:
看看第一行代碼:它嘗試解碼目標暫存器,它位于您輸入數字的第 9-11 位。
假設instr有 16 位abcdefgh ijklmnop,那么我們要提取第 9-11 位,即efg:
instr >> 9將所有內容向右移動 9 位,但答案仍然有 16 位:00000000 0abcdefg。
& 0b111是 的簡寫& 0b00000000 00000111,因此將其應用于instr >> 9結果00000000 00000efg,或者正好是我們希望提取的三位。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/391740.html
