这是我大学的倒数第二个学期,这门课叫微处理器的体系结构和编程,教授写了这段代码,我就是不明白他在做什么。特别是带面具的部分。这是代码。谁能帮我理解一下吗?
#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;
}
据我所知,他打印出了登记册,并向系统提供了一个指令。
1条答案
按热度按时间um6iljoc1#
函数
get_bits
(也称为“带掩码的部分”)接受一个32位整数和两个计数。第一个计数是要忽略多少低位,第二个计数是要返回多少低位。(正如@PeterCordes在一个注解中指出的,由于一些限制,函数as-is不适合 * 一般 * 使用,但我猜这段代码是为了说明某些要点而编写的。)get_bits
分别以值15和5调用。这意味着忽略15,返回5。“M”表示最高有效位,“L”表示最低有效位,“i”表示忽略(右移),“r”表示返回。
至于如何实现,请参阅C语言中有关位移位和位操作符的参考资料。至于它在语义上的含义,可以从附带的课程材料中了解到,这些位(标记为
A1
)的含义。