以动画形式看几条指令的执行过程:
This presentation is the property of its rightful owner.
Sponsored Links
1 / 21

以动画形式看几条指令的执行过程: 2200: ADD R2, R3 ; 3 条指令的地址为 2200 、 2201 、 2202 PowerPoint PPT Presentation


  • 67 Views
  • Uploaded on
  • Presentation posted in: General

以动画形式看几条指令的执行过程: 2200: ADD R2, R3 ; 3 条指令的地址为 2200 、 2201 、 2202 2201: JRNC 2200 ; 若 C=0 转去执行第 1 条,否则顺序执行 2202: STRR [R2], R3 ; 把 R3 的内容写入内存地址为 [R2] 的单元 程序运行的初始状态: 程序已读入内存,第 1 条指令地址已经在 PC 中,

Download Presentation

以动画形式看几条指令的执行过程: 2200: ADD R2, R3 ; 3 条指令的地址为 2200 、 2201 、 2202

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


2200 add r2 r3 3 2200 2201 2202

以动画形式看几条指令的执行过程:

2200: ADD R2, R3 ;3 条指令的地址为2200、2201、2202

2201: JRNC 2200 ;若C=0 转去执行第1条,否则顺序执行

2202: STRR [R2], R3 ; 把 R3的内容写入内存地址为 [R2] 的单元

程序运行的初始状态:程序已读入内存,第1条指令地址已经在PC中,

假定 R2的初值为 1234, R3的初值为2345。

ADD指令的二进制代码为 00000000 0011 0010,已在内存中

JRNC指令的二进制代码为 01000101 1111 1110,已在内存中

STRR指令的二进制代码为 10000011 0010 0011,已在内存中

3 条指令都要在取指周期执行读取指令的操作,

ADD 指令要在 执行周期完成数据运算与写回功能;结束

JRNC指令要在 执行周期完成指令地址计算并保存功能; 结束

STRR指令要在 执行周期完成数据地址计算并保存功能,

还要在 存储周期完成存储器的写入功能。 结束


2200 add r2 r3 3 2200 2201 2202

2 2 0 1

4 5 F E

0 0 3 2

0 0 3 2

1

1

2 2 0 0

2 2 0 0

取指操作:在取指周期,以PC作地址读内存,读出指令送IR,计算下条指令地址

假设PC的内容为 2200,内存2200单元的内容为 0023,IR的内容未定

实现功能:pc→AB, mem[AB]→ir , pc+1→pc

控制信号:addr_sel=01, gate_en=1, mio=1, ir_wt=1, pc_wt=1


2200 add r2 r3 3 2200 2201 2202

ADD R2, R3

动画演示

REGs(3) + REGs(2)

→ REG(3)

假设R2的内容为1234

R3的内容为2345

控制信号:

b_sel 选 00

a_sel选 00

s_sel 选 00

r_sel 选 00

alu_func 选 000

reg_src 选 00

reg_wt 选 1

flag_func选001

00000000 0010 0011

+

2

2

0

1234

1234

0

2345

2345

3579

3

3

在执行周期,完成在取指周期读出来的加法指令的具体运算过程


2200 add r2 r3 3 2200 2201 2202

0 0

2 2 0 2

4 5 F E

4 5 F E

0 0 2 3

1

2 2 0 1

2 2 0 1

0 0 2 3

取指操作:在取指周期,以PC作地址读内存,读出指令送IR,计算下条指令地址

此时PC的内容为 2201,内存2201单元的内容为 45FE,IR的原有内容0023

实现功能:pc→AB, mem[AB]→ir , pc+1→pc

控制信号:addr_sel=01, gate_en=1, mio=1, ir_wt=1, pc_wt=1


2200 add r2 r3 3 2200 2201 2202

JRNC 2200

01000101 11111110

0 0

2 2 0 0

4 5 F E

0 0 2 3

2 2 0 2

4 5 F E

F E

相对转移指令:标志位C为 0 时,转移到2200地址,否则顺序执行

在执行周期,由控制器部件计算转移指令地址,若C=0 则把转移地址送入PC

实现功能:if nc then pc+offset→pc

控制信号:add_sel=1, pc_wt=1


2200 add r2 r3 3 2200 2201 2202

2 2 0 3

8 3 2 3

8 3 2 3

0 0 3 2

1

1

2 2 0 2

2 2 0 2

4 5 F E

取指操作:在取指周期,以PC作地址读内存,读出指令送IR,计算下条指令地址

此时PC的内容为 2202,IR的原内容45FE,假设内存2203单元的内容为 8323

实现功能:pc→AB, mem[AB]→ir , pc+1→pc

控制信号:addr_sel=01, gate_en=1, mio=1, ir_wt=1, pc_wt=1


2200 add r2 r3 3 2200 2201 2202

STRR [R2], R3

动画演示

在执行周期,在运算器部件中完成把R2的内容送地址寄存器AR的操作

R2的内容为1234

R3的内容为3579

请注意,此步骤中是计算数据在内存中的单元地址,通过R2+ 0→AR实现,不影响C、Z等标志位;不使用R3。

10000001 0010 0011

00

+

2

2

1234

1234

3579

1234

1234

0000

3

3

在执行周期,完成读内存指令的数据地址计算与传送操作


2200 add r2 r3 3 2200 2201 2202

STRR [R2],R3

动画演示

在存储器读写周期,完成把寄存器堆中的一个寄存器 (R3) 的内容写入存储器的由 AR 指定地址的一个存储单元

10000001 0010 0011

00

+

2

1234

0000

3579

3579

1234

3

3579

3579

3

1234

8132

写内存指令,在存储器读写周期,完成把寄存器R3的内容写入存储器的选定单元

实现功能: Reg[R3]→Mem[AR] ,运算器中通过 R3+0 执行数据计算

控制信号:addr_sel=00,s_sel=01,r_sel=00,gate_en=1,gate_dir=1,mio=1,we=1


2200 add r2 r3 3 2200 2201 2202

1 2 0 2

4 5 F E

4 5 F E

0 0 2 3

1

1 2 0 1

1 2 0 1

取指操作

实现功能:pc→AB, mem[AB]→ir , pc+1→pc

控制信号:addr_sel=01, gate_en=1, mio=1, ir_wt=1, pc_wt=1


2200 add r2 r3 3 2200 2201 2202

双寄存器指令

实现功能:Regs[dr] op Regs[sr] → Regs[dr]

控制信号:b_src=00, a_sel=0, s_sel=00, r_sel=00,

alu_func= OP 码, reg_wt=1 (cmp、test 除外), flag_func=001


2200 add r2 r3 3 2200 2201 2202

单寄存器指令(INC、DEC)

实现功能:Regs[dr] +1 (或-1) → Regs[dr]

控制信号:b_src=00, s_sel=00, r_sel=11,

alu_func= 000或001, reg_wt=1, flag_func=001


2200 add r2 r3 3 2200 2201 2202

单寄存器指令(SHL、SHR)

实现功能:Regs[dr] << 1 (或 >> 1) → Regs[dr]

控制信号:b_src=00, s_sel=00, r_sel=01,

alu_func= 000, reg_wt=1, flag_func=011 (或100)


2200 add r2 r3 3 2200 2201 2202

MVRD指令

实现功能:pc→AB, mem[AB]→dr,pc+1→pc

控制信号:s_sel=01, r_sel=10, reg_wt=1, pc_wt=1

addr_sel=01, gate_en=1, mio=1


2200 add r2 r3 3 2200 2201 2202

相对转移指令(JR、JRC、JRNC、JRZ、JRNZ)

实现功能:pc +offset → pc ( 如果转移条件成立 )

控制信号:add_src=1, pc_wt=1 ( 如果转移条件成立 )


2200 add r2 r3 3 2200 2201 2202

JMPA指令

实现功能:pc→AB, mem[AB]→pc

控制信号:pc_src=10,pc_wt=1

addr_sel=01, gate_en=1, mio=1


2200 add r2 r3 3 2200 2201 2202

读内存指令LDRR_1

实现功能:sr → ar

控制信号:s_sel=01, ar_wt=1


2200 add r2 r3 3 2200 2201 2202

读内存指令LDRR_2

实现功能:Mem[ar] → dr

控制信号:s_sel=01, r_sel=10, reg_wt=1


2200 add r2 r3 3 2200 2201 2202

CALA指令-1

实现功能:pc→AB,mem[AB]→pc, pc+1→npc, sp-1→sp,ar

控制信号:gate_en=1, mio=1, addr_sel=1,pc_src=10,pc_wt=1, npc_wt=1

b_src=01, r_sel=11, alu_func=001, reg_wt=1, ar_wt=1


2200 add r2 r3 3 2200 2201 2202

CALA指令-2

实现功能:ar→AB, npc→mem[AB]

控制信号:npc_ib=1,gate_en=1,gate_dir=1, mio=1, we=1


2200 add r2 r3 3 2200 2201 2202

RET指令_1

实现功能:sp→AB,sp+1→sp

控制信号:a_sel=1, y_sel=1, ar_wt=1

b_sel=01, r_sel=11, reg_wt=1


2200 add r2 r3 3 2200 2201 2202

RET指令_2

实现功能:ar→AB,mem[AB]→pc

控制信号:pc_src=10,pc_wt=1

gate_en=1, mio=1


  • Login