计算机组成原理课程设计(1)
创始人
2024-02-26 14:45:33
0

指令设计

计算机组成原理课程设计

1、完成以下9条指令的设计:

  • LDI Rd,#data,
  • LDA Rd,adr,
  • STA @adr,Rs,
  • LDR Rd,@Rs,
  • ADD Rd,Rs,
  • XOR Rd,Rs,
  • JMP adr,
  • JZ adr,
  • HALT

2.指令设计

序号

指令助记符

功能介绍

实现的功能

操作码

指令举例

二进制机器代码

地址

微指令

地址

1

LDI Rd,#data

立即数寻址(双字节指令16位)

立即数传输

Rdß#data

0001

LDI R0 ,48H

0001 00 00

0100 1000

00

01

00B22000

01H

2

LDA Rd,adr

直接寻址(取数)

R1 <-[adr]

0010

LDA R1 ,[01H]

0010 01 00

0000 0001

02

03

00B02020

00122000

02H

20H

3

STA @adr,Rs

间接寻址(存数,将Rs中的内容给[adr]地址)

R0-> [adr]

0011

STA [0FH] ,R0

0011 00 00

0000 1111

04

05

00B02021

1F102022

1F011000

03H

21H

22H

4

LDR Rd,@Rs

寄存器间接寻址(将RS地址中的数据存到Rs中)

Rd <-[Rs]

0100

LDR R1,[R0]

0100 01 00

06

1A001023

00122000

04H

23H

5

ADD Rd,Rs

寄存器寻址(计算RD和RS的值结果放到Rd中)

Rd <-Rd+Rs

0101

ADD R1<-R1+R0

0101 01 00

07

89021000

05H

6

XOR Rd,Rs

寄存器间接寻址(异或指令)

Rd<-Rd异或Rs

0110

XOR R0<-R0+R1

0110 00 01

08

16021000

06H

7

JMP adr

无条件跳转

PC<-adr

0111

JMP PC<-adr

0111 0000

0000 1101

09

10

00F02000

07H

8

HALT

停机

1111

11110000

11

00040000

0FH

9

HALT

停机

1111

11110000

12

00040000

0FH

10

LDI Rd,#data

立即数寻址(双字节指令16位)

立即数传输

Rdß#data

0001

LDI R1 ,

0001 01 00

11100010

13

14

00B22000

01H

11

ADD Rd,Rs

寄存器寻址(计算RD和RS的值结果放到Rd中)

Rd <-Rd+Rs

0101

ADD R1<-R1+R0

0101 01 00

15

89021000

05H

12

JZ adr

条件转移指令(结果为0的转移)

If ZF=1,PC<-adr

1000

 为0跳转到停机的位置

1000 0000

00010011

16

17

00902224

00E02000

00200000

08H

25H

24H

13

ADD Rd,Rs

寄存器寻址(计算RD和RS的值结果放到Rd中)

Rd <-Rd+Rs

0101

ADD R1<-R1+R0

0101 01 00

18

89021000

05H

14

HALT

停机

1111

11110000

19

00040000

0FH

3.每条指令的微指令和仿真图

1. LDI Rd,#data

序号

指令助记符

功能

实现的功能

操作码

指令举例

二进制机器代码

地址

微指令

微指令地址

1

LDI Rd,#data

立即数寻址(双字节指令16位)

立即数传输

Rdß#data

0001

LDI R0 ,48H

0001 00 00

0100 1000

00

01

取指令:00B82080

执行指令:00B22000

立即数送R0

00H

01H

通过测试的将48H放到R0寄存器。

2. LDA Rd,adr

序号

指令助记符

功能

实现的功能

操作码

指令举例

二进制机器代码

地址

微指令

微指令地址

2

LDA Rd,adr

直接寻址(取数)

R1 <-[adr]

0010

LDA R1 ,[01H]

0010 01 00

0000 0001

02

03

取指令:00B82080

取adr送bus:00B02020

取adr中的内容给R1:00122000

00H

02H

20H

直接寻址,将adr地址对应的内容送到R1寄存器中。通过测试的将[01H]= 48H放到R1寄存器。

3.立即数寻址

序号

指令助记符

功能

实现的功能

操作码

指令举例

二进制机器代码

地址

微指令

微指令地址

3

STA @adr,Rs

间接寻址(存数,将Rs中的内容给[adr]地址)

R0-> [adr]

0011

STA [0FH] ,R0

0011 00 00

0000 1111

04

05

取指令:00B82080

取[adr]:00B02021

取R0的值:1F102022

将R0的值写到[adr]:1F011000

00H

03H

21H

22H

间接寻址,将adr地址内的内容做有效地址。将R0中的内容存到[adr]对应的地址中。

需要更正一下:是将adr取出来送BUS,然后才是adr存AR,取R0送BUS,最后把R0的值存到adr中

更正的截图

4. LDR Rd,@Rs

序号

指令助记符

功能

实现的功能

操作码

指令举例

二进制机器代码

地址

微指令

微指令地址

3

LDR Rd,@Rs

寄存器间接寻址(将RS地址中的数据存到Rs中)

Rd <-[Rs]

0100

LDR R1,[R0]

0100 01 00

06

取指令:00B82080

R0中的内容到bus:1A001023

将[R0]地址内的内容取出来存到R1中:00122000

00H

04H

23H

寄存器间接寻址,将Rs中的内容作为地址,从[Rs]地址中取数,将取出来的数存到Rd中。

测试的是将@R0中的内容给了R1。且[48H]=0E。

5. ADD Rd,Rs

序号

指令助记符

功能

实现的功能

操作码

指令举例

二进制机器代码

地址

微指令

微指令地址

3

ADD Rd,Rs

寄存器寻址(计算RD和RS的值结果放到Rd中)

Rd <-Rd+Rs

0101

ADD R1<-R1+R0

0101 01 00

07

取指令:00B82080

相加结果送R1:89021000

00H

05H

将Rd和Rs相加的结果送Rd中。测试的是R0+R1结果送R1,实际上加的两个数是48H+0E=56H。

6. XOR Rd,Rs

序号

指令助记符

功能

实现的功能

操作码

指令举例

二进制机器代码

地址

微指令

微指令地址

3

XOR Rd,Rs

寄存器间接寻址(异或指令)

Rd<-Rd异或Rs

0110

XOR R0<-R0异或R1

0110 00 01

08

取指令:00B82080

异或结果送R1:16021000

00H

06H

将Rd和Rs异或的结果送Rd中。测试的是R0异或R1结果送R0,实际上加的两个数是48H异或56H=1E。

7. JMP adr

序号

指令助记符

功能

实现的功能

操作码

指令举例

二进制机器代码

地址

微指令

微指令地址

7

JMP adr

无条件跳转

PC<-adr

0111

JMP PC<-adr

0111 0000

0000 1101

09

10

取指令:00B82080

取出Adr给Pc:00F02000

00H

07H

8

HALT

停机

1111

11110000

11

取指令:00B82080

停机:00040000

00H

0F

9

HALT

停机

1111

11110000

12

取指令:00B82080

停机:00040000

00H

0F

10

LDI Rd,#data

立即数寻址(双字节指令16位)

立即数传输

Rdß#data

0001

LDI R1 ,E2

0001 01 00

11100010

13

14

取指令:00B82080

执行指令:00B22000

立即数送R1

00H

01H

通过一个JUMP指令跳转到指定的位置,按照正常的执行顺序的话下一个指令的地址应该就是11H,执行到11H就会停机,而现在通过跳转直接跳转到0000 1101=13H地址处去执行LDI指令。

下图是JMP的执行过程:

执行JMP后的LDI过程:为下面的JZ做铺垫的!

8. JZ adr

序号

指令助记符

功能

实现的功能

操作码

指令举例

二进制机器代码

地址

微指令

微指令地址

11

JZ adr

条件转移指令(结果为0的转移)

If ZF=1,PC<-adr

1000

 为0跳转到停机的位置

 

1000 0000

00010011

16

17

取指令:00B82080

取出Adr给Pc:00902224

adr->PC:00E02000
PC+1->PC:00200000

00H

08H

25H

24H

12

ADD Rd,Rs

寄存器寻址(计算RD和RS的值结果放到Rd中)

Rd <-Rd+Rs

0101

ADD R1<-R1+R0

0101 01 00

18

取指令:00B82080

相加结果送R1:89021000

00H

05H

13

HALT

停机

1111

11110000

19

取指令:00B82080

停机:00040000

00H

0F

当ZF=1的时候就是结果为0的标志,测试JZ adr的时候用的是ADD R1,R0的结果,上面算出来为0。当不是0的时候就正常的PC+1,否则就是跳转到指定的位置。比如我写的这个ZF=1的时候直接跳转到停机的位置(第一张图),不是0的时候就正常往下执行(第2张图)。

第1张图:ZF=1。

第二张图:我通过修改第序号等于10的那一步R1的值[对应的地址是0EH,由E2H改为E3H]。从而使得ZF=0。

9. HALT

序号

指令助记符

功能

实现的功能

操作码

指令举例

二进制机器代码

地址

微指令

微指令地址

13

HALT

停机

1111

11110000

19

取指令:00B82080

执行指令:00B22000

立即数送R1

00H

01H

当执行HALT指令时机器就会停止运行。

10.完整的仿真图

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...