课程设计题目
综合运用所学计算机原理知识,设计并实现具有以下16条指令的指令集结构的模型计算机:
编号 助记符 机器指令码 说明
0 SUB Rd,Rs 0000 RdRs Rd-Rs→Rd
1 ADD Rd,Rs 0001 RdRs Rd+Rs→Rd
2 AND Rd,Rs 0010 RdRs Rd&Rs→Rd (Rd和Rs相与)
3 DEC Rd 0011 Rd00 将Rd值减1
4 CLR Rd 0100 Rd00 将Rd清零
5 RL Rd 0101 Rd00 Rd循环左移一位
6 RRC Rd 0110 Rd00 Rd带进位右移一位
7 MOV Rd,Rs 0111 RdRs Rs→Rd
8 LDI Rd,* 1000 Rd00 XXXXXXXX 将指令中的立即数(第二字节)送入Rd
9 OUT IOH,Rs 1001 00Rs Rs→i/o(数据开关)高字节
10 LDA Rd,M 1010 Rd00 XXXXXXXX XXXXXXXX [M] →Rd
11 STA M,Rs 1011 00Rs XXXXXXXX XXXXXXXX Rs→[M]
12 JMP M 1100 0000 XXXXXXXX XXXXXXXX [M]→PC,即跳转到M所指单元
13 JZ M 1101 0000 XXXXXXXX XXXXXXXX 当Z=1时,跳转到M所指单元
14 JC M 1110 0000 XXXXXXXX XXXXXXXX 当CY=1时,跳转到M所指单元
15 HALT 1111 0000 停机
2、设计提示
1)上表中,机器指令码的高4位为指令操作码,M为16位存储器地址, Rs为源寄存器,Rd为目的寄存器,占2位,并规定:
Rs或Rd 选定的寄存器
00 R0
01 R1
10 R2
11 R3
2)在微程序中,微地址001为取指。
3)各指令指行阶段微程序入口地址的确定方式:
微地址位号 10 9 8 7 6 5 4 3 2 1 0
内容 1 1 IR7~IR4 0 0 0 0 0
例如,第5条指令”RL Rd” 的指令码为0101 Rd00 则指令码的高4位IR7~IR4为0101,由上表知,微程序入口微地址为: 11 0101 00000 ,即6A0H。
注:第10、9位来自0001条微指令中upc所设置值的第10、9位。例如,如果是600则为11,如果是400则为10.





汇编语句:
助记符 操作数 指令码 长度
SUB R0,R0 00 1 ; R0-R0→R0
SUB R0,R1 01 1 ; R0-R1→R0
SUB R0,R2 02 1 ; R0-R2→R0
SUB R0,R3 03 1 ; R0-R3→R0
SUB R1,R0 04 1 ; R1-R0→R1
SUB R1,R1 05 1 ; R1-R1→R1
SUB R1,R2 06 1 ; R1-R2→R1
SUB R1,R3 07 1 ; R1-R3→R1
SUB R2,R0 08 1 ; R2-R0→R2
SUB R2,R1 09 1 ; R2-R1→R2
SUB R2,R2 0A 1 ; R2-R2→R2
SUB R2,R3 0B 1 ; R2-R3→R2
SUB R3,R0 0C 1 ; R3-R0→R3
SUB R3,R1 0D 1 ; R3-R1→R3
SUB R3,R2 0E 1 ; R3-R2→R3
SUB R3,R3 0F 1 ; R3-R3→R3
ADD R0,R0 10 1 ; R0+R0→R0
ADD R0,R1 11 1 ; R0+R1→R0
ADD R0,R2 12 1 ; R0+R2→R0
ADD R0,R3 13 1 ; R0+R3→R0
ADD R1,R0 14 1 ; R1+R0→R1
ADD R1,R1 15 1 ; R1+R1→R1
ADD R1,R2 16 1 ; R1+R2→R1
ADD R1,R3 17 1 ; R1+R3→R1
ADD R2,R0 18 1 ; R2+R0→R2
ADD R2,R1 19 1 ; R2+R1→R2
ADD R2,R2 1A 1 ; R2+R2→R2
ADD R2,R3 1B 1 ; R2+R3→R2
ADD R3,R0 1C 1 ; R3+R0→R3
ADD R3,R1 1D 1 ; R3+R1→R3
ADD R3,R2 1E 1 ; R3+R2→R3
ADD R3,R3 1F 1 ; R3+R3→R3
AND R0,R0 20 1 ; R0&R0→R0
AND R0,R1 21 1 ; R0&R1→R0
AND R0,R2 22 1 ; R0&R2→R0
AND R0,R3 23 1 ; R0&R3→R0
AND R1,R0 24 1 ; R1&R0→R1
AND R1,R1 25 1 ; R1&R1→R1
AND R1,R2 26 1 ; R1&R2→R1
AND R1,R3 27 1 ; R1&R3→R1
AND R2,R0 28 1 ; R2&R0→R2
AND R2,R1 29 1 ; R2&R1→R2
AND R2,R2 2A 1 ; R2&R2→R2
AND R2,R3 2B 1 ; R2&R3→R2
AND R3,R0 2C 1 ; R3&R0→R3
AND R3,R1 2D 1 ; R3&R1→R3
AND R3,R2 2E 1 ; R3&R2→R3
AND R3,R3 2F 1 ; R3&R3→R3
DEC R0 30 1 ; R0值减1
DEC R1 34 1 ; R1值减1
DEC R2 38 1 ; R2值减1
DEC R3 3C 1 ; R3值减1
CLR R0 40 1 ; 将R0清零
CLR R1 44 1 ; 将R1清零
CLR R2 48 1 ; 将R2清零
CLR R3 4C 1 ; 将R3清零
RL R0 50 1 ; R0循环左移一位
RL R1 54 1 ; R1循环左移一位
RL R2 58 1 ; R2循环左移一位
RL R3 5C 1 ; R3循环左移一位
RRC R0 60 1 ; R0带进位右移一位
RRC R1 64 1 ; R1带进位右移一位
RRC R2 68 1 ; R2带进位右移一位
RRC R3 6C 1 ; R3带进位右移一位
MOV R0,R0 70 1 ; R0→R0
MOV R0,R1 71 1 ; R1→R0
MOV R0,R2 72 1 ; R2→R0
MOV R0,R3 73 1 ; R3→R0
MOV R1,R0 74 1 ; R0→R1
MOV R1,R1 75 1 ; R1→R1
MOV R1,R2 76 1 ; R2→R1
MOV R1,R3 77 1 ; R3→R1
MOV R2,R0 78 1 ; R0→R2
MOV R2,R1 79 1 ; R1→R2
MOV R2,R2 7A 1 ; R2→R2
MOV R2,R3 7B 1 ; R3→R2
MOV R3,R0 7C 1 ; R0→R3
MOV R3,R1 7D 1 ; R1→R3
MOV R3,R2 7E 1 ; R2→R3
MOV R3,R3 7F 1 ; R3→R3
LDI R0,* 80 2 ; 将指令中的立即数送入R0
LDI R1,* 84 2 ; 将指令中的立即数送入R1
LDI R2,* 88 2 ; 将指令中的立即数送入R2
LDI R3,* 8C 2 ; 将指令中的立即数送入R3
OUT IOH,R0 90 1 ; R0→i/o(数据开关)高字节
OUT IOH,R1 91 1 ; R1→i/o(数据开关)高字节
OUT IOH,R2 92 1 ; R2→i/o(数据开关)高字节
OUT IOH,R3 93 1 ; R3→i/o(数据开关)高字节
LDA R0,* A0 3 ; [M] →R0
LDA R1,* A4 3 ; [M] →R1
LDA R2,* A8 3 ; [M] →R2
LDA R3,* AC 3 ; [M] →R3
STA *,R0 B0 3 ; R0→[M]
STA *,R1 B1 3 ; R1→[M]
STA *,R2 B2 3 ; R2→[M]
STA *,R3 B3 3 ; R3→[M]
JMP * C0 3 ; [M]→PC,即跳转到M所指单元
JZ * D0 3 ; 当Z=1时,跳转到M所指单元
JC * E0 3 ; 当CY=1时,跳转到M所指单元
HALT “” F0 1 ; 停机(总线锁定)
实验报告和.IS文件下载入口:
.IS文件
实验报告
注:仅供参考