标签:
将内存单元数据DATA减去用绝对地址ADDR表示的内存单元的内容,结果保存到由DR内容指定的内存单元中。
| D4 | DR | X | 
| ADDR | ||
| DATA | ||
DATA- [ADDR] → [DR]
根据指令的功能和指令格式,先读取地址ADDR单元内容暂时放置于Q寄存器中。通过把PC→AR,此时MEM里的内容就是内存单元的数据DATA。这时,MEM-Q→Q,并将DR→AR,这时地址寄存器AR存放的正好是DR,因此只要将Q寄存器内容写入存储器就可以完成指令功能。此外,微程序中必须实现两次PC+1→PC操作,才能确保PC的正确走向。
1 100: PC→AR, PC+1→PC ;0000 0E00 A0B5 5402 2 101: MEM→AR ;0000 0E00 10F0 0002 3 102: MEM→Q ;0000 0E00 00F0 0000 4 103: PC→AR, PC+1→PC ;0000 0E00 A0B5 5402 5 104: MEM-Q→Q ;0000 0E00 02E0 0000 6 105: DR→AR ;0000 0E00 90B0 000A 7 106: Q→MEM, CC#=0 ;0029 0300 1020 0010
| CI3-0 | /MIO REQ /WE | MI8-0 | A | B | SCi | DC1 | DC2 | ||||||||
| 顺序执行 | 
 不操作  | 
 F→B Y=A  | 
R+S | 
 R=0 S=B  | 
PC | PC | Cin取值1 | 不用管 | 地址寄存器AR | ||||||
| 
 /WE设为1把Y(PC) 送到内部总线好让AR接收  | 
 F=0+PC+Cin→PC Y=A=PC Y的内容会 被送到内部数据总线  | 
PC默认是R5 | PC默认是R5 | PC+1→PC | 
 PC→AR (Y→AR)  | 
||||||||||
| 1110 | 101 | 0 1 0 | 0 0 0 | 0 1 1 | 0101 | 0101 | 01 | 000 | 010 | ||||||
注:以下A,B均为0000,不操作
| CI3-0 | /MIO REQ /WE | MI8-0 | SCi | DC1 | DC2 | ||||
| 顺序执行 | 
 存储器读  | 
 无 F  | 
R+S | 
 R=D S=0  | 
Cin取值0 | 不用管 | 地址寄存器AR | ||
| 
 MEM的数据 送到内部总线  | 
 Y=F=D+0 送到内部总线  | 
D+0 | 
 D输入端是 内部总线送来的数据  | 
 MEM→AR (Y=D→AR)  | 
|||||
| 1110 | 001 | 0 0 1 | 0 0 0 | 1 1 1 | 00 | 000 | 010 | ||
| CI3-0 | /MIO REQ /WE | MI8-0 | SCi | DC1 | DC2 | ||||
| 顺序执行 | 
 存储器读  | 
 F→Q Y=F  | 
R+S | 
 R=D S=0  | 
Cin取值0 | 不用管 | 未使用 | ||
| 
 MEM的数据 送到内部总线  | 
 F=D+0→Q  | 
D+0 | 
 D输入端是 内部总线送来的数据  | 
||||||
| 1110 | 001 | 0 0 1 | 0 0 0 | 1 1 1 | 00 | 000 | 000 | ||
| CI3-0 | /MIO REQ /WE | MI8-0 | SCi | DC1 | DC2 | ||||
| 顺序执行 | 
 存储器读  | 
 F→Q Y=F  | 
R-S | 
 R=D S=Q  | 
Cin取值0 | 不用管 | 未使用 | ||
| 
 MEM的数据 送到内部总线  | 
 F=D-Q→Q  | 
D-Q | 
 D输入端是 内部总线送来的数据  | 
||||||
| 1110 | 001 | 0 0 0 | 0 1 0 | 1 1 0 | 00 | 000 | 000 | ||
| CI3-0 | /MIO REQ /WE | MI8-0 | SCi | SA | SB | DC1 | DC2 | ||||
| 顺序执行 | 
 不操作  | 
 无 Y=F  | 
R+S | 
 R=0 S=B  | 
 Cin 取值0  | 
A=A | B=DR | 不用管 | 
 地址寄存器 AR  | 
||
| 
 /WE设为1把Y 送到内部总线好让AR接收  | 
 Y=F=0+B 送到内部总线  | 
0+B | 
 
  | 
 SA=0 A口的值来自A口的字段 SA=1 A口的值来自SR的字段  | 
 SB=0 B口的值来自B口的字段 SB=1 B口的值来自DR的字段  | 
 DR→AR (Y→AR)  | 
|||||
| 1110 | 101 | 0 0 1 | 0 0 0 | 1 1 0 | 00 | 0 | 1 | 000 | 010 | ||
| 下地址MAR9-0 | CI3-0 | /MIO REQ /WE | MI8-0 | SCi | DC1 | DC2 | ||||
| 
 A4H A4H微指令的功能是依据有无中断请求, 决定是进入中断处理过程,还是顺序执行下一条指令。 这是每条机器指令完成后应该执行的一项操作。  | 
条件转移 | 
 存储器写  | 
 无 Y=F  | 
R+S | 
 R=0 S=Q  | 
Cin取值0 | 运算器的输出 | 未使用 | ||
| 
 最后要条件转移到A4H执行后续处理程序 若有中断:→ADH∽B6H→A5H 若无中断:→A5H  | 
 
  | 
 
  | 
 Y=F=Q  | 
0+Q | 
 
  | 
 送往内部总线IB的数据 这样MEM就能拿到Y(Q)了  | 
||||
| 
 10100010 (往前补零)  | 
0011 | 000 | 0 0 1 | 0 0 0 | 010 | 00 | 001 | 000 | ||
    关于如何得到微码,首先我们得利用微指令分析器。但当我戳那个小企鹅时,发生了错误……这样:
这是TABCTL32.OTX所在目录不正确的原因,且尚未加载到,可自行寻找解决方案。嘴上这么说还是给了链接【。

你可以打开TEC-2模拟机,再开监控程序;也可以直接打开该文件夹下的monitor~
1. 首先,将微码输入到由0900H开始的内存单元中。用E命令输入微码,回车后输入微程序。每个数值间以空格分开,输入完毕后按回车键。如:
>E0900
2. 加载微码,以A命令输入微码。如:
>A0800
0800:MOV R1, 900 ;微码在内存中的首地址 0802:MOV R2,7 ;微指令条数 0804:MOV R3, 100 ;微码在微控制存储器中的首地址 0806:LDMC ;加载微码指令,将微码指令加载到微控制存储器中 0807:RET 0808:
3. 用G命令运行加载微码的程序。如:
>G0800
4. 用A命令输入新程序,用来测试。如:
>A0820 0820:MOV R0,0011 ; 0011→R0 0822:MOV [0890],R0 ; R0内容→内存0890地址 0824:MOV R1,0891 ; 0891→R1 0826:NOP ; NOP是空操作指令,预留单元 0827:NOP 0828:NOP 0829:RET
5. 在NOP开始的地方调用新指令用来测试。如:
>E0826 D410 0890 0111 ; 指令格式:D4DRX ADDR DATA (D410的1是R1寄存器,结果要送到的地方。在4中,我们用了 MOV R1, 0891命令,故之后可以在0891看R1的内容)
这样就调用了新指令的操作码D4,配合操作数 ADDR=0890 DATA=1111。然后:
>G0820 ; 执行首地址为0820的微程序
6. 查看结果,用D或者R命令查看程序运行后内存或寄存器状态。
>D0891
7. 运行截图:

标签:
原文地址:http://www.cnblogs.com/daix6/p/4461895.html