JUC-II CPU的微程序设计 计算机组成原理课程设计 微指令编码

JUC-II CPU的微程序设计包括不同寻址方式的微指令编码(八种源操作数寻址方式、七种目的操作数寻址方式)、38种执行操作的微指令编码等。

所有的微指令编码均验证过了,对各种操作指令充分思考。最后还将各种指令汇总到一个程序里进行整体试验证,验证结果正确。

课程设计背景、目标等不过多阐述,主要记录微指令的编码以及自己画的一些流程图。

目录

一、微指令编码

1.取指令阶段

2.取源操作数阶段

(1)取源操作数入口

(2)不同的寻址方式

3.取目的操作数阶段

(1) 取目的操作数入口

(2)不同的寻址方式

​4.执行阶段

(1)执行阶段入口

(2)双操作数执行阶段微程序的设计(包括MOV、ADD、ADDC、SUB、SUBB、AND、OR、XOR、CMP、TEST)

(3)移位指令的设计(包括SAR、SHL、SHR、ROL、ROR、RCL、RCR)①SAR指令

(4)转移指令的设计(包括JC、JNC、JO、JNO、JZ、JNZ、JS、JNS、JMP)

(5)单操作数指令(包括INC、DEC、NOT)

(6)堆栈指令(包括PUSH、POP、CALL、RET指令)

(7)无操作数指令(包括HALT、NOP、RETI、EI、DI、中断隐指令)

二、微程序流程图

1.取源操作数的不同寻址方式:

2.取目的操作数时的不同寻址方式:

3.执行MOV、ADD、ADDC、SUB、SUBB、AND、OR、XOR、CMP、TEST时:

4.执行SAR、SHL、SHR、ROL、ROR、RCL、RCR这七条移位指令时:

5.执行JC、JNC、JO、JNO、JZ、JNZ、JS、JNS、JMP转移指令时:

6.执行INC、DEC、NOT时:

7.执行PUSH、POP、CALL堆栈指令时:

8.执行HALT、NOP、RET、RETI、EI、DI指令时:

 三、微程序的设计与验证

1.分类设计

(1)双操作数指令的验证

(2)单操作数指令和移位汇编指令的验证

(3)转移类汇编指令的验证

(4)堆栈类指令的验证

(5)中断指令的验证

2.整体验证 


一、微指令编码

有些表格上传之后格式会乱,因此有的地方是用图片形式上传的,有些是表格直接复制上来的。

1.取指令阶段

微地址

微指令

微指令字段

代表微操作

F0

F1

F2

F3

F4

F5

F6

F7

NAC

NA

3

3

4

2

2

2

1

3

3

9

000

20080001

1

2

001

PCoe,ARce

001

00069002

1

2

1

1

002

ARoe’、RD、DRce'、PCinc

002

CC000003

6

3

003

DRoe、IRce

003

00000404

2

004

BM2

2.取源操作数阶段

(1)取源操作数入口

004

00000A08

5

008

005

00000A08

5

008


(2)不同的寻址方式

①寄存器寻址

②寄存器间接寻址

 ③寄存器自增间接寻址

④立即寻址

⑤直接寻址

⑥间接寻址

 ⑦变址寻址

 ⑧相对寻址

3.取目的操作数阶段

(1) 取目的操作数入口

006

00000A28

5

028

(2)不同的寻址方式

①寄存器寻址

②寄存器间接寻址

③寄存器自增间接寻址

④直接寻址

⑤间接寻址

⑥变址寻址

⑦相对寻址

4.执行阶段

(1)执行阶段入口

007

00000800

4

000

(2)双操作数执行阶段微程序的设计(包括MOV、ADD、ADDC、SUB、SUBB、AND、OR、XOR、CMP、TEST)

①MOV指令

041

94000040

4

5

040

TRoe、Ace

040

00300E50

3

050

SVce

②ADD指令

042

98700E50

4

6

1

3

050

TRoe、ADD、SVce、PSWce

③ADDC指令

043

98B00E50

4

6

2

3

050

TRoe、ADDC、SVce、PSWce

④SUB指令

044

98F00E50

4

6

3

3

050

TRoe、SUB、SVce、PSWce

⑤SUBB指令

045

99300E50

4

6

4

3

050

TRoe、SUBB、SVce、PSWce

⑥AND指令

046

99700E50

4

6

5

3

050

TRoe、AND、SVce、PSWce

⑦OR指令

047

99B00E50

4

6

6

3

050

TRoe、OR、SVce、PSWce

⑧XOR指令

048

9A300E50

4

6

1

3

050

TRoe、XOR、SVce、PSWce

⑨CMP指令

049

98F00200

4

6

1

7

000

TRoe、SUB、PSWce

⑩TEST指令

04A

99700200

4

6

5

3

000

TRoe、AND、PSWce

结果保存:

050

68000200

3

2

1

000

Soe、GRSce

051

60030052

3

3

052

Soe、DRce

052

00052200

1

1

2

1

000

ARoe’、DRce'、WR

(3)移位指令的设计(包括SAR、SHL、SHR、ROL、ROR、RCL、RCR)
①SAR指令

061

18100E50

6

1

7

050

PSWce、SRce

②SHL指令

062

18200E50

6

2

7

050

PSWce、SLce

③SHR指令

063

18100E50

6

1

7

050

PSWce、SRce

④ROL指令

064

18200E50

6

2

7

050

PSWce、SLce

⑤ROR指令

065

18100E50

6

1

7

050

PSWce、SRce

⑥RCL指令

066

18200E50

6

2

7

050

PSWce、SLce

⑦RCR指令

067

18100E50

6

1

7

050

PSWce、SRce

(4)转移指令的设计(包括JC、JNC、JO、JNO、JZ、JNZ、JS、JNS、JMP)

①JC指令

068

00000622

3

022

NOP

②JNC指令

069

00000622

3

022

NOP

③JO指令

06A

00000622

3

022

NOP

④JNO指令

06B

00000622

3

022

NOP

⑤JZ指令

06C

00000622

3

022

NOP

⑥JNZ指令

06D

00000622

3

022

NOP

⑦JS指令

06E

00000622

3

022

NOP

⑧JNS指令

06F

00000622

3

022

NOP

⑨JMP指令

070

A4000200

5

1

1

ARoe、PCce

⑩跳转地址
不满足条件:

022

00000200

1

满足条件:

023

A4000200

5

1

1

ARoe、PCce

(5)单操作数指令(包括INC、DEC、NOT)

①INC指令

071

1A700E50

6

9

3

7

050

PSWce、SVce、INC

②DEC指令

072

1AB00E50

6

9

PSWce、SVce、DEC

③NOT指令

073

19F00E50

6

A

3

PSWce、SVce、NOT

(6)堆栈指令(包括PUSH、POP、CALL、RET指令)

①PUSH指令

078

003000B0

3

0B0

SVce

0B0

600300B1

3

3

0B1

Soe、DRce

0B1

F40000B2

7

5

0B2

SPoe、Ace

0B2

02B000B3

B

3

0B3

DEC、SVce

0B3

7C080052

3

7

2

052

Soe、SPce、ARce

②POP指令

079

B0000092

092

ARoe、TRce

092

E0080093

7

2

093

SPoe、ARce

093

02C61094

B

1

2

1

094

SPinc、ARoe’、DRce’、RD

094

D4000095

B

3

1

095

DRoe、Ace

095

00300096

3

096

SVce

096

80080E50

4

2

050

TRoe、ARce

③CALL指令

07A

B3000097

5

4

6

097

ARoe、TRce、SPdec

097

E0080098

7

2

098

SPoe、ARce

098

20030099

1

3

099

PCoe、DRce

099

84052200

4

1

1

1

2

1

000

TRoe、PCce、ARoe’、DRoe’、WR

④RET指令

05A

E00800A0

7

2

0A0

SPoe、ARce

0A0

02C610A1

B

1

2

1

0A1

SPinc、ARoe’、DRce’、RD

0A1

C4000000

6

1

DRoe、PCce

(7)无操作数指令(包括HALT、NOP、RETI、EI、DI、中断隐指令)

①HALT指令

058

00000058

058

②NOP指令

059

00000200

1

000

③RETI指令

05B

E00800A2

7

2

0A2

SPoe、ARce

0A2

02C610A3

B

1

2

1

0A3

SPinc、ARoe’、DRce’、RD

0A3

C00040A4

6

1

0A4

DRoe、PSWce’

0A4

E00800A5

7

2

0A5

SPoe、ARce

0A5

02C610A6

B

1

2

1

0A6

SPinc、ARoe’、DRce’、RD

0A6

C4000000

6

1

000

DRoe、PCce

④EI指令

05C

00005200

5

1

000

STI

⑤DI指令

05D

00006200

6

1

000

CLI

⑥中断隐指令

080

F40000C0

7

5

0C0

SPoe、Ace

0C0

22B300C1

1

A

3

0

3

0C1

PCoe、DEC、SVce、DRce

0C1

740800C2

3

5

2

0C2

Soe、Ace、ARce

0C2

000520C3

1

1

2

0C3

ARoe’、DRce'、WR

0C3

02B330C4

A

3

3

3

0C4

PSWoe、DEC、SVce、DRce

0C4

7C0800C5

3

7

2

0C5

Soe、SPce、ARce

0C5

000520C6

1

1

2

0C6

ARoe’、DRce'、WR

0C6

000270C7

2

7

0C7

DRce’、INTA

0C7

C00800C8

6

2

0C8

DRoe、ARce

0C8

000610C9

1

2

1

0C9

ARoe’、RD、DRce'

0C9

C4006000

3

1

6

000

DRoe、PCce、CLI

二、微程序流程图

图1源于书上,图2图的框架源于网络、自己加以了内容的填充,下面其他的所有图均为原创,加上做的时候时间比较紧,可能会有错误,希望读者加以检查、不要照搬。

1.取源操作数的不同寻址方式:

2.取目的操作数时的不同寻址方式:

3.执行MOV、ADD、ADDC、SUB、SUBB、AND、OR、XOR、CMP、TEST时:

 

4.执行SAR、SHL、SHR、ROL、ROR、RCL、RCR这七条移位指令时:

 5.执行JC、JNC、JO、JNO、JZ、JNZ、JS、JNS、JMP转移指令时:

6.执行INC、DEC、NOT时:

7.执行PUSH、POP、CALL堆栈指令时:

8.执行HALT、NOP、RET、RETI、EI、DI指令时:

 三、微程序的设计与验证

1.分类设计

(1)双操作数指令的验证

 ①汇编指令的设计:

②结果分析

预期结果:

0030H:把0050H存入R0

0032H:源操作数是直接寻址,将0050H中的数0045H存入R1

0034H:   R0与R1相加,结果0095H存入R1

0035H:源操作数是寄存器间接寻址,R0中的数据是0050H,主存0050H中的数据是0045H,所以把0045H存入R2中

0036H:R2和R1相减,结果存入R2

0037H:源操作数是间接寻址,0046H中的数据是0047H,0047H中的数据是0048H,所以把0048H存入R3

验证结果:

实际结果与预期结果一致。 

(2)单操作数指令和移位汇编指令的验证

 ①汇编指令的设计:

②结果分析

预期结果:
0030H:将立即数0050H送至R0
0032H:将立即数0045H送至R1
0034H:对R0里的数自增,变为0051H

0035H:对R1里的数自减,变为0044H

0036H:将立即数0046送至R2

0038H:将R2右移,即为0000 0000 0100 0110 → 0000 0000 0010 0011,R2变为0023H

0039H:将R0与R1进行相加,结果送至R1,即为0095H

验证结果:

验证结果与预期结果一致。

(3)转移类汇编指令的验证

①汇编指令的设计:

②结果分析

预期结果:

0030H:将立即数0010送至R0。

0032H:对源操作数和目的操作数使用寄存器寻址的方式,将R0的数据送至R1。

0033H:对R0和R1进行减操作,结果保存到R1中。

0034H:因为ZF=1,因此进行条件转移,转移至0040H。

0040H:对R1进行自增,R1变为0001H。

0041H:ZF=0,实现转移指令,转移到0044H。

0044H:停机指令HALT。

验证结果:

验证结果与预期结果一致。 

(4)堆栈类指令的验证

①汇编指令设计:

②结果分析

预期结果:

0030H:将立即数0050H送至R0

0032H:将R0压入栈

0033H:出栈,结果保存至R1

0034H:子程序调用0039H

0039H:将立即数0039H送至R2

003BH:子程序返回

0036H:源操作数和目的操作数都是采用寄存器寻址的方式,执行MOV指令,将R2的值送给R3

验证结果:

由图可知,验证结果与预期结果一致。

(5)中断指令的验证

①汇编指令设计:

②结果分析:

预期结果:

0030H:源操作数立即寻址、目的操作数直接寻址,将0100H送入主存0000H中(这一步是因为KEY0中断服务程序入口地址在0100H,000单元是KEY0的中断向量)。

0033H:源操作数立即寻址,目的操作数直接寻址,将FFFEH送入主存FF00H中(这一步是设置屏蔽字)。

0036H:在程序刚开始的时候就按下了KEY0,产生了中断请求,这里执行EI指令,开中断

0100H:上一条指令执行完之后,响应中断请求,进行中断服务。源操作数和目的操作数都采用直接寻址方式。(这一步是读输入数据接口,送给红色LED,同时清除KEY0中断请求,如果不清除中断请求,会导致不停地进入该中断)

0103H:源操作数是立即寻址,目的操作数为直接寻址,将1H送到FF01H中。

0106H:执行中断返回指令。

0037H:回到断点,将立即数0001H送到R0。

0039H:将立即数0039H送到R2。

验证结果:

2.整体验证 

将双操作数指令、单操作数指令、移位指令、转移指令、堆栈指令、中断指令都写入一个程序当中进行验证。(提交材料的文件名为:整体调试汇编指令.ai、整体调试主存内容.mmc)
汇编指令的设计为:

预期结果为:

1.  0030H:源操作数立即寻址、目的操作数直接寻址,将0100H送入主存0000H中(这一步是因为KEY0中断服务程序入口地址在0100H,000单元是KEY0的中断向量)。

2.  0033H:源操作数立即寻址,目的操作数直接寻址,将FFFEH送入主存FF00H中(这一步是设置屏蔽字)。

3.  0036H:执行EI指令,开中断

4.  0037H:源操作数立即寻址,目的操作数寄存器寻址,将0050送入R0中。在此过程中按下KEY0,但当前指令依然执行下去了。

5.   0100H:上一条指令执行完之后,响应中断请求,进行中断服务。源操作数和目的操作数都采用直接寻址方式。(这一步是读输入数据接口,送给红色LED,同时清除KEY0中断请求,如果不清除中断请求,会导致不停地进入该中断)

6.   0103H:源操作数是立即寻址,目的操作数为直接寻址,将1H送到FF01H中。

7.   0106H:执行中断返回指令。

8.   0039H:回到断点,执行PUSH指令,将R0压入栈。

9.   003AH:取出栈顶数据,存入R1,即R1值为0050H。

10.  003BH:移位指令,将R1右移,即0000 0000 0101 0000 → 0000 0000 0010 1000,R1值为0028H。

11.  003CH:无条件转移到0040H。

12.  0040H:DEC指令,R1值减一,变为0027H。

13.  0041H:TEST指令,R0:0000 0000 0101 0000,R1:0000 0000 0010 0111,按位进行与运算,结果为0000,只保存PSW结果,不保存结果到寄存器中。

14.  0042H:MOV指令,源操作数为立即寻址,目的操作数为寄存器寻址,将0030H送到R2。

15.  0044H: 将R0进行右移,结果为0028,保存至R0中。

16. 0045H:HALT停机指令。

验证结果展示:

编号uAddr

PC

IR

SP

TR

A

PSW

R0

R1

1

0000

0030

0000

0030

0000

0000

0000

0000

2

0033

0033

1620

0030

0100

0100

0000

0000

3

0036

0036

1620

0030

FFFE

FFFE

0000

0000

4

0100

0100

0004

002E

FFFE

002E

0000

0000

5

0103

0103

1820

002E

0000

0000

0000

0000

6

0106

0106

1620

002E

0001

0001

0000

0000

7

0037

0037

0003

0030

0001

0001

0000

0000

8

0039

0039

1600

0030

0050

0050

0050

0000

9

003A

003A

0600

002F

0050

002F

0050

0000

10

003B

003B

0641

0030

003A

0050

0050

0050

11

003C

003C

0041

0030

003A

0028

0050

0028

12

0040

0040

0420

0030

003A

0028

0050

0028

13

0041

0041

0481

0030

003A

0027

0050

0027

14

0042

0042

A001

0030

0050

0000

0050

0027

15

0044

0044

1602

0030

0030

0030

0050

0027

 验证结果与预期一致,指令功能实现。

  • 54
    点赞
  • 181
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 17
    评论
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱学习的小颜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值