从外部输入4个无符号数,将前两个数相加,和存入内存30H单元;后两个数相减,差存入内存31H单元。并将两个结果分别输出
STO Rs,Addr为双字节指令,格式为:
双字节指令 | 寄存器 |
---|---|
第1字节 | 0011 Rs xx |
第2字节 | Addr |
目标码
存储地址 | 二进制机器码 | 十六进制 | 汇编代码 | 注 释 |
---|---|---|---|---|
00H | 1000 xx 00 | 80H | IN R0 | 将值输入到R0寄存器 |
01H | 1000 xx 01 | 81H | IN R1 | 将值输入到R1寄存器 |
02H | 1010 00 01 | A1H | ADD R0,R1 | R0和R1相加,放在R1 |
03H | 0011 01 xx | 34H | STO R1,30H | 将R1里的值存入30H |
04H | 0011 00 00 | 30H | STO R1,30H | 将R1里的值存入30H |
05H | 1011 xx 01 | B1H | OUT R1 | 将R1的值输出 |
06H | 1000 xx 00 | 80H | IN R0 | 将值输入到R0寄存器 |
07H | 1000 xx 01 | 81H | IN R1 | 将值输入到R1寄存器 |
08H | 0110 xx 01 | 61H | SUB R0,R1 | R0减R1,结果放在R1上 |
09H | 0011 01 xx | 34H | STO R1,31H | 将R1里的值存在31H |
0AH | 0011 00 01 | 31H | STO R1,31H | 将R1里的值存在31H |
0BH | 1011 xx 01 | B1H | OUT R0 | 将R1的值输出 |
RAM中分布:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | |
---|---|---|---|---|---|---|---|---|
00 | 80H | 81H | A1H | 34H | 30H | B1H | 80H | 81H |
08 | E1H | 34H | 31H | B1H | ||||
10 | ||||||||
18 | ||||||||
20 | ||||||||
28 |
概要设计
1、 定义题目所需指令
ADD 操作码:1010
SUB 操作码:0110
STO 操作码:0011
公操作:IN指令和OUT指令
2、 微指令对应微操作
第1步:分析一条微指令的作用,以及所需要微操作的步骤;
第2步:根据查看设计指南中24位微代码格式,找到S3S0、M、Cn、WE、A9、A8、uA0uA5和A、B、C字段所对应的功能码;
第3步:微操作执行完则转公操作。
3、 指令与微指令的调用关系
一条指令是由一段微程序完成的.微程序中一般包含多条微指令.本题中的ADD指令由三条微指令构成,第一条微指令是把源寄存器中的数放到DR1中,第二条微指令把目的寄存器的值放到DR2中,第三条微指令把DR1和DR2中的值进行计算输出到总线上。STO指令也由三条微指令构成,第一条微指令是把程序计数器的值打到总线上,再把将总线上的数据装载到AR中同时PC+1。第二条微指令读RAM同时把总线上的数据装载到AR中。第三条微指令写RAM,将寄存器里的值写到总线上,将总线上的值写到目标地址中。SUB指令同ADD指令,不同之处就是第三条微指令中是进行的减操作。
详细设计
1、 加(ADD)
指令格式:ADD Rs,Rd
1010 00 01
入口地址计算:
I7~I4=1010 → SE4~SE1=1101,对基准初值010000进行逻辑运算 → 010010
入口地址:12H
需要的微命令:
第1步:将Rs的值打到DR2
命令:RS_B (B段:001)→ LDDR2(A段:010)
第一条微指令: 01A21A,存储在入口地址12H单元中
第2步:将Rd的值打到DR2
命令:RD_d (B段:010)→ LDDR2(A段:011)
第二条微指令: 01B422,存储在24H单元
第3步:相加 → ALU_B → LADRi
命令:S3S2S1S0MCn = 100100 → ALU_B(B段:101)→ LDRi(A段:001)
第三条微指令: 919A01,存储在2CH单元
详细设计方案以上传。https://download.youkuaiyun.com/download/qq_42024234/11833132