-1 c cpu processor cpu-architecture microprocessors
这是我在大学的最后一个学期,副课叫做微处理器的体系结构和编程,教授写了这段代码,我只是无法理解他在做什么。尤其是有面具的部分。这是代码。谁能帮我理解一下吗?
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
uint32_t Instruction_Memory[0x2000];
uint32_t PC = 0;
uint32_t Registers[32];
uint32_t Data_Memory[0x3000];
uint32_t get_instruction(uint32_t input){
uint32_t temp = input/4;
return Instruction_Memory[temp];
}
void print_registers() {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 8; j++) {
printf("x%d: %x \t", i*8+j, Registers[i*8+j]);
}
printf("\n");
};
};
uint32_t get_bits(uint32_t input, int start, int numberOfBits){
uint32_t t4 = input >> start;
uint32_t mask = (1 << numberOfBits) - 1;
t4 = mask & t4;
// printf("input : %x, start : %d, nob : %d, mask : %x\n", input, start, numberOfBits, mask);
return t4;
}
int main(){
PC = 0x1000;
// x5
Registers[5] = 6;
// x9
Registers[9] = 0x2004;
Data_Memory[0x2000] = 10;
Instruction_Memory[0x1000 / 4] = 0xFFC4A303;
Instruction_Memory[0x1004 / 4] = 0x0064A423;
Instruction_Memory[0x1008 / 4] = 0x0062E233;
uint32_t instruction = get_instruction(0x1000);
printf("Instruction = 0x%x\n\r", instruction);
print_registers();
uint32_t A1 = get_bits(instruction, 15, 5);
printf("A1 = %x\n\r", A1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
据我了解,他打印了寄存器,并向系统提供了指令。
该函数get_bits(又名“带有掩码的部分”)采用 32 位整数和两个计数。第一个计数是要忽略多少个低位,第二个计数是要返回多少个。(正如 @PeterCordes 在评论中指出的那样,由于某些限制,该函数原样不适合一般使用,但我想这段代码只是一次性说明某些点。)
get_bits分别用值 15 和 5 调用。这意味着忽略 15,返回 5。
Mbbbbbbb bbbbbbbb bbbbbbbb bbbbbbbL
rrrr riiiiiii iiiiiiii
Run Code Online (Sandbox Code Playgroud)
“M”表示最高有效位,“L”表示最低有效位,“i”表示忽略(右移),“r”表示返回。
至于如何完成此操作,请查看有关位移和按位运算符的 C 参考资料。至于它在语义上的含义,这应该从您随附的课程材料中清楚地解释这些位(标记的A1)含义。