C语言 创建处理器

l3zydbqr  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(178)

这是我大学的倒数第二个学期,这门课叫微处理器的体系结构和编程,教授写了这段代码,我就是不明白他在做什么。特别是带面具的部分。这是代码。谁能帮我理解一下吗?

#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;
}

据我所知,他打印出了登记册,并向系统提供了一个指令。

um6iljoc

um6iljoc1#

函数get_bits(也称为“带掩码的部分”)接受一个32位整数和两个计数。第一个计数是要忽略多少低位,第二个计数是要返回多少低位。(正如@PeterCordes在一个注解中指出的,由于一些限制,函数as-is不适合 * 一般 * 使用,但我猜这段代码是为了说明某些要点而编写的。)
get_bits分别以值15和5调用。这意味着忽略15,返回5。

Mbbbbbbb bbbbbbbb bbbbbbbb bbbbbbbL
             rrrr riiiiiii iiiiiiii

“M”表示最高有效位,“L”表示最低有效位,“i”表示忽略(右移),“r”表示返回。
至于如何实现,请参阅C语言中有关位移位和位操作符的参考资料。至于它在语义上的含义,可以从附带的课程材料中了解到,这些位(标记为A1)的含义。

相关问题