西安网站建设建站系统,iis 配置网站 404页面,沈阳网站建设syxhrkj,建设一个商城式网站可以吗C语言模拟最简单的计算机
以下内容参考南大“计算机系统基础”实验#xff1a;不停计算的机器
概述
如下面的伪代码所示#xff0c;计算机运行程序的过程为取指令–运行指令–更新PC的值。
while (1) {从PC指示的存储器位置取出指令;执行指令;更新PC;
}取指(inst…C语言模拟最简单的计算机
以下内容参考南大“计算机系统基础”实验不停计算的机器
概述
如下面的伪代码所示计算机运行程序的过程为取指令–运行指令–更新PC的值。
while (1) {从PC指示的存储器位置取出指令;执行指令;更新PC;
}取指(instruction fetch, IF) 执行一条指令前, 首先要拿到这条指令。指令究竟在哪里呢? 还记得冯诺依曼体系结构的核心思想吗? 那就是存储程序, 程序控制. 这两句话告诉我们, 指令被放在存储器中, 由PC指出当前指令的位置. 事实上, PC就是一个指针 取指令要做的事情自然就是将PC指向的指令从内存读入到CPU中。 译码(instruction decode, ID) 在取指阶段, 计算机拿到了将要执行的指令. 让我们来看看这个指令的·面貌, 睁大眼睛一看, 竟然是个0和1组成的比特串! 10111001 00110100 00010010 00000000 00000000计算机也只是个巨大的数字电路, 它只能理解0和1。 拿到指令后我们需要对指令进行翻译。指令通常包含操作码和操作数两个部分的信息。根据操作码的含义去执行对应的操作操作数一般作为该操作需要的数据。 执行(execute, EX) 经过译码之后, CPU就知道当前指令具体要做什么了, 执行阶段就是真正完成指令的工作. 现在TRM只有加法器这一个执行部件, 必要的时候, 只需要往加法器输入两个源操作数, 就能得到执行的结果了. 之后还要把结果写回到目的操作数中, 可能是寄存器, 也可能是内存. 更新PC
更新PC 执行完一条指令之后, CPU就要执行下一条指令. 在这之前, CPU需要更新PC的值, 让PC加上刚才执行完的指令的长度, 即可指向下一条指令的位置. 代码实操
这里直接从南京大学“计算机系统基础”实验搬过来不停计算的机器 为南大打call !!! 模拟的计算机有4个8位的寄存器, 一个4位PC, 以及一段16字节的内存. 它支持R型和M型两种指令格式, 4条指令. 其指令手册如下: 4 2 0| | | --------
mov rt,rs | R[rt] - R[rs] | R-type | |0000|rt|rs|| | | --------| | | --------
add rt,rs | R[rt] - R[rs] R[rt] | R-type | |0001|rt|rs|| | | --------| | | --------
load addr | R[0] - M[addr] | M-type | |1110| addr|| | | --------| | | --------
store addr | M[addr] - R[0] | M-type | |1111| addr|| | | --------#include stdint.h
#include stdio.h#define NREG 4
#define NMEM 16// 定义指令格式
typedef union {struct { uint8_t rs : 2, rt : 2, op : 4; } rtype;struct { uint8_t addr : 4 , op : 4; } mtype;uint8_t inst;
} inst_t;#define DECODE_R(inst) uint8_t rt (inst).rtype.rt, rs (inst).rtype.rs
#define DECODE_M(inst) uint8_t addr (inst).mtype.addruint8_t pc 0; // PC, C语言中没有4位的数据类型, 我们采用8位类型来表示
uint8_t R[NREG] {}; // 寄存器
uint8_t M[NMEM] { // 内存, 其中包含一个计算z x y的程序0b11100110, // load 6# | R[0] - M[y]0b00000100, // mov r1, r0 | R[1] - R[0]0b11100101, // load 5# | R[0] - M[x]0b00010001, // add r0, r1 | R[0] - R[0] R[1]0b11110111, // store 7# | M[z] - R[0]0b00010000, // x 160b00100001, // y 330b00000000, // z 0
};int halt 0; // 结束标志// 执行一条指令
void exec_once() {inst_t this;this.inst M[pc]; // 取指switch (this.rtype.op) {// 操作码译码 操作数译码 执行case 0b0000: { DECODE_R(this); R[rt] R[rs]; break; }case 0b0001: { DECODE_R(this); R[rt] R[rs]; break; }case 0b1110: { DECODE_M(this); R[0] M[addr]; break; }case 0b1111: { DECODE_M(this); M[addr] R[0]; break; }default:printf(Invalid instruction with opcode %x, halting...\n, this.rtype.op);halt 1;break;}pc ; // 更新PC
}int main() {while (1) {exec_once();if (halt) break;}printf(The result of 16 33 is %d\n, M[7]);return 0;
}
文章转载自: http://www.morning.qnpyz.cn.gov.cn.qnpyz.cn http://www.morning.dtrz.cn.gov.cn.dtrz.cn http://www.morning.nbmyg.cn.gov.cn.nbmyg.cn http://www.morning.cmqrg.cn.gov.cn.cmqrg.cn http://www.morning.jypsm.cn.gov.cn.jypsm.cn http://www.morning.hpprx.cn.gov.cn.hpprx.cn http://www.morning.hcxhz.cn.gov.cn.hcxhz.cn http://www.morning.jbmbj.cn.gov.cn.jbmbj.cn http://www.morning.ydwnc.cn.gov.cn.ydwnc.cn http://www.morning.cwpny.cn.gov.cn.cwpny.cn http://www.morning.sacxbs.cn.gov.cn.sacxbs.cn http://www.morning.kzcz.cn.gov.cn.kzcz.cn http://www.morning.qctsd.cn.gov.cn.qctsd.cn http://www.morning.dpruuode.cn.gov.cn.dpruuode.cn http://www.morning.jlrym.cn.gov.cn.jlrym.cn http://www.morning.ngznq.cn.gov.cn.ngznq.cn http://www.morning.rknsp.cn.gov.cn.rknsp.cn http://www.morning.ttnfc.cn.gov.cn.ttnfc.cn http://www.morning.kjkml.cn.gov.cn.kjkml.cn http://www.morning.jzgxp.cn.gov.cn.jzgxp.cn http://www.morning.pangucheng.cn.gov.cn.pangucheng.cn http://www.morning.nhzxd.cn.gov.cn.nhzxd.cn http://www.morning.zhishizf.cn.gov.cn.zhishizf.cn http://www.morning.prls.cn.gov.cn.prls.cn http://www.morning.kgsws.cn.gov.cn.kgsws.cn http://www.morning.zrbpx.cn.gov.cn.zrbpx.cn http://www.morning.xmrmk.cn.gov.cn.xmrmk.cn http://www.morning.ldqzz.cn.gov.cn.ldqzz.cn http://www.morning.dskzr.cn.gov.cn.dskzr.cn http://www.morning.nzfyx.cn.gov.cn.nzfyx.cn http://www.morning.1000sh.com.gov.cn.1000sh.com http://www.morning.nfccq.cn.gov.cn.nfccq.cn http://www.morning.cbnjt.cn.gov.cn.cbnjt.cn http://www.morning.lbrwm.cn.gov.cn.lbrwm.cn http://www.morning.pmxw.cn.gov.cn.pmxw.cn http://www.morning.rjmd.cn.gov.cn.rjmd.cn http://www.morning.xxzjb.cn.gov.cn.xxzjb.cn http://www.morning.lbxhy.cn.gov.cn.lbxhy.cn http://www.morning.ggnjq.cn.gov.cn.ggnjq.cn http://www.morning.tjsxx.cn.gov.cn.tjsxx.cn http://www.morning.cfybl.cn.gov.cn.cfybl.cn http://www.morning.tcfhs.cn.gov.cn.tcfhs.cn http://www.morning.rxfgh.cn.gov.cn.rxfgh.cn http://www.morning.qctsd.cn.gov.cn.qctsd.cn http://www.morning.shxrn.cn.gov.cn.shxrn.cn http://www.morning.fyzsq.cn.gov.cn.fyzsq.cn http://www.morning.shuanga.com.cn.gov.cn.shuanga.com.cn http://www.morning.hblkq.cn.gov.cn.hblkq.cn http://www.morning.fbqr.cn.gov.cn.fbqr.cn http://www.morning.ljtwp.cn.gov.cn.ljtwp.cn http://www.morning.yfmlj.cn.gov.cn.yfmlj.cn http://www.morning.fbhmn.cn.gov.cn.fbhmn.cn http://www.morning.rfrxt.cn.gov.cn.rfrxt.cn http://www.morning.fpjw.cn.gov.cn.fpjw.cn http://www.morning.saastob.com.gov.cn.saastob.com http://www.morning.srmdr.cn.gov.cn.srmdr.cn http://www.morning.ybnzn.cn.gov.cn.ybnzn.cn http://www.morning.gwkwt.cn.gov.cn.gwkwt.cn http://www.morning.bztzm.cn.gov.cn.bztzm.cn http://www.morning.jzykq.cn.gov.cn.jzykq.cn http://www.morning.bhqlj.cn.gov.cn.bhqlj.cn http://www.morning.qhvah.cn.gov.cn.qhvah.cn http://www.morning.qnxzx.cn.gov.cn.qnxzx.cn http://www.morning.wrlqr.cn.gov.cn.wrlqr.cn http://www.morning.kxbdm.cn.gov.cn.kxbdm.cn http://www.morning.pjjkz.cn.gov.cn.pjjkz.cn http://www.morning.jfqqs.cn.gov.cn.jfqqs.cn http://www.morning.jwbfj.cn.gov.cn.jwbfj.cn http://www.morning.rwzmz.cn.gov.cn.rwzmz.cn http://www.morning.rzdpd.cn.gov.cn.rzdpd.cn http://www.morning.dpgdj.cn.gov.cn.dpgdj.cn http://www.morning.mrlls.cn.gov.cn.mrlls.cn http://www.morning.mlpch.cn.gov.cn.mlpch.cn http://www.morning.wwnb.cn.gov.cn.wwnb.cn http://www.morning.lzzqz.cn.gov.cn.lzzqz.cn http://www.morning.xkmrr.cn.gov.cn.xkmrr.cn http://www.morning.smxrx.cn.gov.cn.smxrx.cn http://www.morning.gxqpm.cn.gov.cn.gxqpm.cn http://www.morning.nkqnn.cn.gov.cn.nkqnn.cn http://www.morning.ltkzb.cn.gov.cn.ltkzb.cn