Skip to content

BUPTSCS 2020年 大一计算机导论与程序设计期末大作业——CPU模拟器

License

Notifications You must be signed in to change notification settings

Jraaay/CPUemulator

Repository files navigation

CPUemulator

这是BUPT(北京邮电大学)SCS(计算机学院)2019-2020学年第二学期大一年级计算机导论课程设计大作业

其中dict.dic为指令代码存放的文件

本项目的dict.dic为使用两个线程进行100张票的出售。

编译的命令为:gcc -o CPUemulator.exe CPUemulator.h dataIO.c initialize.c instructionProcess.c instructionSet.c main.c printFunction.c toolFunction.c

(或者您可以前往Release页面下载已经编译的可执行文件)

注:该代码仅适用于Windows平台运行,不支持Linux及MacOS。

指令集

指令名称 指令 说明
停机指令 00000000 00000000 0000000000000000 停止程序执行。
数据传送指令 00000001 00010000 0000000000000000 将一个立即数(后16位)传送至寄存器1
00000001 00010101 0000000000000000 将寄存器5(5、6、7、8号寄存器为地址寄存器)中地址所指向的内存单元(2个字节)的内容传送至寄存器1
00000001 01010001 0000000000000000 将寄存器1的内容传送至寄存器5中地址所指向的内存单元(2个字节)5、6、7、8号寄存器为地址寄存器)。
算数运算指令 00000010 00010000 0000000000000000 将寄存器1内的数与一个立即数(后16位)相加,结果保存至寄存器1
00000010 00010101 0000000000000000 将寄存器1内的数与寄存器5中地址所指向的内存单元(2个字节)里存的数相加,结果保存至寄存器1
00000011 00010000 0000000000000000 将寄存器1内的数减去一个立即数(后16位),结果保存至寄存器1
00000011 00010101 0000000000000000 将寄存器1内的数减去寄存器5中地址所指向的内存单元(2个字节)里存的数,结果保存至寄存器1
00000100 00010000 0000000000000000 将寄存器1内的数与一个立即数(后16位)相乘,结果保存至寄存器1
00000100 00010101 0000000000000000 将寄存器1内的数与寄存器5中地址所指向的内存单元(2个字节)里存的数相乘,结果保存至寄存器1
00000101 00010000 0000000000000000 将寄存器1内的数除以(C语言的整数除法)一个立即数(后16位),结果保存至寄存器1
00000101 00010101 0000000000000000 将寄存器1内的数除以(C语言的整数除法)寄存器5中地址所指向的内存单元(2个字节)里存的数,结果保存至寄存器1
逻辑运算指令 00000110 00010000 0000000000000000 将寄存器1内的数与一个立即数(后16位)做逻辑与,结果保存至寄存器1(如果结果为真则保存1,否则保存0)
00000110 00010101 0000000000000000 将寄存器1内的数与寄存器5中地址所指向的内存单元(2个字节)里存的数做逻辑与,结果保存至寄存器1(如果结果为真则保存1,否则保存0)
00000111 00010000 0000000000000000 将寄存器1内的数与一个立即数(后16位)做逻辑或,结果保存至寄存器1(如果结果为真则保存1,否则保存0)
00000111 00010101 0000000000000000 将寄存器1内的数与寄存器5中地址所指向的内存单元(2个字节)里存的数做逻辑或,结果保存至寄存器1(如果结果为真则保存1,否则保存0)
00001000 00010000 0000000000000000 将寄存器1内的数做逻辑非,结果保存至寄存器1(如果结果为真则保存1,否则保存0)
00001000 00000101 0000000000000000 将寄存器5中地址所指向的内存单元(2个字节)里存的数做逻辑非,结果仍保存至寄存器5中地址所指向的内存单元(如果结果为真则保存1,否则保存0)
比较指令 00001001 00010000 0000000000000000 将寄存器1内的数与一个立即数(后16位)比较,如两数相等,则标志寄存器被修置为0,如寄存器1大,则标志寄存器被置为1,如寄存器1小,则标志寄存器被置为-1。
00001001 00010101 0000000000000000 将寄存器1内的数与寄存器5中地址所指向的内存单元(2个字节)里存的数比较,如两数相等,则标志寄存器被置为0,如寄存器1大,则标志寄存器被置为1,如寄存器1小,则标志寄存器被置为-1。
跳转指令 00001010 00000000 0000000000000000 无条件跳转指令,转移至程序计数器加一个立即数(后16位)处执行。也就是说要修改程序计数器。
00001010 00000001 0000000000000000 如果标志寄存器内的值为0则转移至程序计数器加一个立即数(后16位)处执行。也就是说要修改程序计数器。
00001010 00000010 0000000000000000 如果标志寄存器内的值为1则转移至程序计数器加一个立即数(后16位)处执行。也就是说要修改程序计数器。
00001010 00000011 0000000000000000 如果标志寄存器内的值为-1则转移至程序计数器加一个立即数(后16位)处执行。也就是说要修改程序计数器。
输入输出指令 00001011 00010000 0000000000000000 从输入端口读入一个整数并保存在寄存器1中。也就是从键盘读一个整数到寄存器1中。
00001100 00010000 0000000000000000 将寄存器1中的数输出到输出端口。也就是将寄存器1中的数以整数的形式输出到显示器上,同时输出一个换行符。
多核版指令 00001101 00000000 0000000000000000 立即数(后16位)为内存地址,请求互斥对象,用于锁住立即数所指定的内存。
00001110 00000000 0000000000000000 立即数(后16位)为内存地址,释放互斥对象,释放掉锁住立即数所指定的内存的互斥对象。与上一条指令对应。
00001111 00000000 0000000000000000 休眠立即数(后16位)毫秒。

About

BUPTSCS 2020年 大一计算机导论与程序设计期末大作业——CPU模拟器

Resources

License

Stars

Watchers

Forks

Packages

No packages published