@TOC
C语言实现CPU仿真,可编程,可扩展
编程模板在==template.txt==里
程序默认载入测试程序文档==test.txt==
提供测试文件 1、==test.txt ==斐波那契数列 2、==testFAC.txt==阶乘
编译运行==SmuCPU.c==文件即可
运行结果会展示CPU完整的寄存器组和主存的代码区、数据区、自定义标识符映射表
way_1.在==test.txt==文件中编写汇编代码即可 way_2.在==template.txt==写入汇编代码后,在==SmuCPU.c==修改路径即可
fp=fopen("test.txt", "r");//第231行
RISC指令集
erum OrderSet={ "MOV","ADD","SUB","INC","DEC","MUL","DIV","XOR",
"PUSH","POP","CMP","JE","CALL","RET" }
递归子程序设计
给定一个正数N≥1存放在NUM单元中,试编制一递归子程序计算FIB(N),并将结果存入RESULT单元中。 Fibonacci数的定义如下: FIB(1)= 1 FIB(2)= 1 FIB(n)= FIB(n-2)+ FIB(n-1) n>2 数据段中至少需要定义以下内容: (1)ID db xxH, yyH, zzH (说明:以学号2186123456为例,其中的xx为12,yy为34,zz为56) (2)定义NUM、RESULT的内存单元
即为test.txt的内容
SSEG SEGMENT
ID DW 41,26,35
NUM DW 10
RESULT DW 0
SSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:SSEG
FIB PROC NEAR
CMP BX ,1
JE FIB1
CMP BX,2
JE FIB2
PUSH BX
DEC BX
CALL FIB
POP BX
MOV CX,AX
ADD AX,DX
MOV DX,CX
RET
FIB1:
MOV AX,1
RET
FIB2:
MOV AX,1
MOV DX,1
RET
FIB ENDP
MAIN PROC far
START:
XOR BX,BX
MOV BX, NUM
CALL FIB
MOV RESULT,AX
MAIN ENDP
CSEG ENDS
END START
以NUM=5为例子
gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)