选定指令格式、操作码,设计如下指令: (1)加法指令。 指令格式:D5DRSR,DISP 双字指令(控存入口100H) 功能: [DR]=[DR] +[[SR]+DISP] (2)传送指令。 指令格式:D8××,ADDR1,ADDR2 三字指令(控存入口110H) 功能: [ADDR1]←[ADDR2] (3)转移指令。判断两个通用寄存器内容是否相等,若相等则转移到指定目的地址((IP)+DISP),否则顺序执行。 指令格式:E1 DR SR,DISP 双字指令(控存入口130H, DISP为相对转移地址偏移量) 功能: if DR=SR goto (IP)+DISP else 顺序执行。
时间: 2024-04-04 20:29:15 浏览: 16
好的,我已经记录下了你的要求。下面是我根据你的要求设计的指令及其格式:
(1) 加法指令:
指令格式:D5 DR SR,DISP
指令功能:[DR]=[DR]+[[SR]+DISP]
指令说明:将[SR]+DISP的值加到[DR]中,并将结果存放在[DR]中。
(2) 传送指令:
指令格式:D8 XX,ADDR1,ADDR2
指令功能:[ADDR1]←[ADDR2]
指令说明:将[ADDR2]中的值传送到[ADDR1]中。
(3) 转移指令:
指令格式:E1 DR SR,DISP
指令功能:if DR=SR goto (IP)+DISP else 顺序执行
指令说明:如果DR的值等于SR的值,则跳转到(IP)+DISP处执行,否则顺序执行。
其中,IP表示指令指针寄存器,DISP为相对转移地址偏移量。
以上是我基于你的要求设计的三条指令及其格式,希望能够满足你的需求。如果还有问题,请随时提出。
相关问题
具体写明微指令设计的微指令地址、控制信号、功能,以及对应的测试数据
好的,以下是针对每个指令的微程序设计、微指令地址、控制信号、功能及对应的测试数据:
(1)加法指令微程序设计:
微指令地址 控制信号 功能
0 MAR <- SR 将SR的内容送到地址寄存器MAR中
1 MDR <- DISP 将偏移量DISP送到MDR中
2 MDR <- MDR + MAR 将MDR和MAR中的内容相加
3 MAR <- MDR 将MDR的内容送到MAR中
4 MDR <- [MAR] 将MAR地址单元的内容送到MDR中
5 MDR <- MDR + [DR] 将MDR和DR中的内容相加
6 [DR] <- MDR 将MDR的内容送到DR中
7 PC <- PC + 1 程序计数器PC加1,指向下一条指令
测试数据:
假设初始时DR=0001H,SR=0100H,[0100H]=0005H,[0001H]=0002H,DISP=0100H,程序计数器PC=0100H。执行D5DRSR,DISP指令后,[0001H]应该等于0007H,PC应该指向下一条指令,即0101H。
(2)传送指令微程序设计:
微指令地址 控制信号 功能
0 MAR <- ADDR2 将ADDR2的内容送到MAR中
1 MDR <- [MAR] 将MAR地址单元的内容送到MDR中
2 MAR <- ADDR1 将ADDR1的内容送到MAR中
3 [MAR] <- MDR 将MDR的内容送到MAR地址单元中
4 PC <- PC + 1 程序计数器PC加1,指向下一条指令
测试数据:
假设初始时[0002H]=0123H,[0000H]=0456H,程序计数器PC=0110H。执行D8XX,ADDR1,ADDR2指令后,[0002H]应该等于[0000H],PC应该指向下一条指令,即0111H。
(3)转移指令微程序设计:
微指令地址 控制信号 功能
0 MDR <- [SR] 将SR的内容送到MDR中
1 MDR1 <- [DR] 将DR的内容送到MDR1中
2 MDR2 <- DISP 将偏移量DISP送到MDR2中
3 ALU <- MDR - MDR1 将MDR和MDR1相减
4 if ALU = 0 then PC <- (IP) + MDR2 else PC <- PC + 1 判断ALU是否等于0,若相等则跳转到(IP)+MDR2,否则指针指向下一条指令
测试数据:
假设初始时[0001H]=0002H,程序计数器PC=0130H。执行E1DRSR,DISP指令后,由于[0001H]的值等于自身的值,所以程序应该跳转到(IP)+0100H地址单元执行指令,PC应该指向0131H。