书接上文,想要理解最好的方法是看个实例,下面是上篇01-基础入门里面的一个微程序每一步的分析,大家可以利用微指令分析器一条一条对着看一遍。
题目:
把用绝对地址表示的内存单元ADDR1中的内容与内存单元ADDR2中的内容相减,结果存于内存单元ADDR1中。
指令格式:D5××,ADDR1,ADDR2, 三字指令(控存入口100H)
功能: [ADDR1]=[ADDR1] -[ADDR2]
设计思路
该指令为三字指令,需要取出两个地址中的内容进行相减,并储存回第一个地址位置。由此可见第一个地址直至最后都需要使用到,为了增加效率,可以先将第二个操作数取出储存至Q寄存器,再取用第一个操作数。
流程图中的缩写含义:
PC: Program Counter (程序计数器)
AR: Address Register (地址寄存器)
MEM: Memory (当出现MEM的时候,就是在对"AR"存的地址取值)
AR相当于"指针",MEM相当于"值"
Q: Q Register (用来计算的)
| 微指令流程图 |
|  |
| 微指令详细设计 |
| 序号 | 微指令功能 | 微指令代码 | 详细功能 |
| 1 | PC+1→AR | 0000 0E00 90B5 5402 | 为AR读入第二个操作数的地址做准备 |
| 2 | MEM→AR | 0000 0E00 10F0 0002 | AR读入第二个操作数的地址 |
| 3 | MEM→Q | 0000 0E00 00F0 0000 | 读第二个操作数并送Q寄存器 |
| 4 | PC→AR,PC+1→PC | 0000 0E00 A0B5 5402 | 为AR读入第一个操作数的地址做准备 |
| 5 | MEM→AR | 0000 0E00 10F0 0002 | AR读入第一个操作数的地址 |
| 6 | QMEM-Q→Q | 0000 0E01 02E0 0000 | 读第一个操作数并进行减法,结果送Q寄存器 |
| 7 | Q→MEM,CC#=0 | 0029 0300 1020 0010 | Q寄存器结果送回第一个操作数位置 |
逐条分析
每条指令里面,标黄的部分是关键的指令位,对着analyzer一条一条看一遍,大概能理解了就
| Instruction#1 |
| 
| B55-B46 | 下地址字段 | 顺序执行时,下地址段任意 | | B45-B44 | 备用 | 备用位任意 | | B43-B40 | CI3~CI0 | 顺序执行 | | B39-B37 | SCC | 任意 | | B36 | SC | 任意 | | B35 | 备用 | 备用位任意 | | B34-B32 | SST | 不是运算,任意即可 | | B31,B27,B23 | /MIO、/REQ、/WE | 不操作 | | B30-B28 | MI8-6 | 运算器Y输出送F口 | | B26-B24 | MI5-3 | 运算功能选择为“R+S” | | B22-B20 | MI2-0 | Am2901的运算数来源选择0和B口 | | B19-B16 | A口 | R5(PC) | | B15-B12 | B口 | R5(PC) | | B11-B10 | SCi | 进位设置为1(实现PC+1) | | B9-B8 | SSH | 无需移位 | | B7 | SA | 选择A口地址 | | B6-B4 | DC1 | 未向总线发送控制,可任意 | | B3 | SB | 选择B口地址 | | B2-B0 | DC2 | 运算器输出送AR,选/GAR | |
| Instruction#2 |
| 
| B55-B46 | 下地址字段 | 顺序执行时,下地址段任意 | | B45-B44 | 备用 | 备用位任意 | | B43-B40 | CI3~CI0 | 顺序执行 | | B39-B37 | SCC | 任意 | | B36 | SC | 任意 | | B35 | 备用 | 备用位任意 | | B34-B32 | SST | 不是运算,任意即可 | | B31,B27,B23 | /MIO、/REQ、/WE | 储存器读取 | | B30-B28 | MI8-6 | 运算器Y输出送F口 | | B26-B24 | MI5-3 | 运算功能选择为“R+S” | | B22-B20 | MI2-0 | Am2901的运算数来源选择D和0 | | B19-B16 | A口 | 未用,任意 | | B15-B12 | B口 | 未用,任意 | | B11-B10 | SCi | 进位为0 | | B9-B8 | SSH | 无需移位 | | B7 | SA | 选择A口地址 | | B6-B4 | DC1 | 未向总线发送控制,可任意 | | B3 | SB | 选择B口地址 | | B2-B0 | DC2 | 运算器输出送AR,选/GAR | |
| Instruction#3 |
| 
| B55-B46 | 下地址字段 | 顺序执行时,下地址段任意 | | B45-B44 | 备用 | 备用位任意 | | B43-B40 | CI3~CI0 | 顺序执行 | | B39-B37 | SCC | 任意 | | B36 | SC | 任意 | | B35 | 备用 | 备用位任意 | | B34-B32 | SST | 不是运算,任意即可 | | B31,B27,B23 | /MIO、/REQ、/WE | 储存器读取 | | B30-B28 | MI8-6 | 运算器Y输出送F口 | | B26-B24 | MI5-3 | 运算功能选择为“R+S” | | B22-B20 | MI2-0 | Am2901的运算数来源选择D和0 | | B19-B16 | A口 | 未用,任意 | | B15-B12 | B口 | 未用,任意 | | B11-B10 | SCi | 进位为0 | | B9-B8 | SSH | 无需移位 | | B7 | SA | 选择A口地址 | | B6-B4 | DC1 | 未向总线发送控制,可任意 | | B3 | SB | 选择B口地址 | | B2-B0 | DC2 | 未使用 | |
| Instruction#4 |
| 
| B55-B46 | 下地址字段 | 顺序执行时,下地址段任意 | | B45-B44 | 备用 | 备用位任意 | | B43-B40 | CI3~CI0 | 顺序执行 | | B39-B37 | SCC | 任意 | | B36 | SC | 任意 | | B35 | 备用 | 备用位任意 | | B34-B32 | SST | 不是运算,任意即可 | | B31,B27,B23 | /MIO、/REQ、/WE | 不操作 | | B30-B28 | MI8-6 | 运算器Y输出送F口,寄存器结果返回至B口 | | B26-B24 | MI5-3 | 运算功能选择为“R+S” | | B22-B20 | MI2-0 | Am2901的运算数来源选择0和B口 | | B19-B16 | A口 | R5(PC) | | B15-B12 | B口 | R5(PC) | | B11-B10 | SCi | 进位设置为1(实现PC+1) | | B9-B8 | SSH | 无需移位 | | B7 | SA | 选择A口地址 | | B6-B4 | DC1 | 未向总线发送控制,可任意 | | B3 | SB | 选择B口地址 | | B2-B0 | DC2 | 运算器输出送AR,选/GAR | |
| Instruction#5 |
| 
| B55-B46 | 下地址字段 | 顺序执行时,下地址段任意 | | B45-B44 | 备用 | 备用位任意 | | B43-B40 | CI3~CI0 | 顺序执行 | | B39-B37 | SCC | 任意 | | B36 | SC | 任意 | | B35 | 备用 | 备用位任意 | | B34-B32 | SST | 不是运算,任意即可 | | B31,B27,B23 | /MIO、/REQ、/WE | 储存器读取 | | B30-B28 | MI8-6 | 运算器Y输出送F口 | | B26-B24 | MI5-3 | 运算功能选择为“R+S” | | B22-B20 | MI2-0 | Am2901的运算数来源选择D和0 | | B19-B16 | A口 | 未用,任意 | | B15-B12 | B口 | 未用,任意 | | B11-B10 | SCi | 进位为0 | | B9-B8 | SSH | 无需移位 | | B7 | SA | 选择A口地址 | | B6-B4 | DC1 | 未向总线发送控制,可任意 | | B3 | SB | 选择B口地址 | | B2-B0 | DC2 | 未使用 | |
| Instruction#6 |
| 
| B55-B46 | 下地址字段 | 顺序执行时,下地址段任意 | | B45-B44 | 备用 | 备用位任意 | | B43-B40 | CI3~CI0 | 顺序执行 | | B39-B37 | SCC | 任意 | | B36 | SC | 任意 | | B35 | 备用 | 备用位任意 | | B34-B32 | SST | 接受ALU标志位输出值 | | B31,B27,B23 | /MIO、/REQ、/WE | 储存器读取 | | B30-B28 | MI8-6 | 运算器Y输出送F口,寄存器结果返回至Q | | B26-B24 | MI5-3 | 运算功能选择为“R-S” | | B22-B20 | MI2-0 | Am2901的运算数来源选择D和Q | | B19-B16 | A口 | 未用,任意 | | B15-B12 | B口 | 未用,任意 | | B11-B10 | SCi | 进位为0 | | B9-B8 | SSH | 无需移位 | | B7 | SA | 选择A口地址 | | B6-B4 | DC1 | 未向总线发送控制,可任意 | | B3 | SB | 选择B口地址 | | B2-B0 | DC2 | 未使用 | |
| Instruction#7 |
| 
| B55-B46 | 下地址字段 | 跳转执行,下地址段为A4,进行中断检测 | | B45-B44 | 备用 | 备用位任意 | | B43-B40 | CI3~CI0 | 条件转移 | | B39-B37 | SCC | 判断CC#=0 | | B36 | SC | 任意 | | B35 | 备用 | 备用位任意 | | B34-B32 | SST | 不是运算,任意即可 | | B31,B27,B23 | /MIO、/REQ、/WE | 储存器写入 | | B30-B28 | MI8-6 | 运算器Y输出送F口 | | B26-B24 | MI5-3 | 运算功能选择为“R+S” | | B22-B20 | MI2-0 | Am2901的运算数来源选择0和Q | | B19-B16 | A口 | 未用,任意 | | B15-B12 | B口 | 未用,任意 | | B11-B10 | SCi | 进位为0 | | B9-B8 | SSH | 无需移位 | | B7 | SA | 选择A口地址 | | B6-B4 | DC1 | 向总线发送控制,运算器输出至[AR] | | B3 | SB | 选择B口地址 | | B2-B0 | DC2 | 未使用 |
|
看懂了这条之后
下一篇继续
计算机组成原理课设Tec-2 03-指令设计