计算机组成原理课程设计(1)

news2025/1/18 20:23:41

指令设计

计算机组成原理课程设计

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,然后才是adrAR,取R0BUS,最后把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.完整的仿真图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/44380.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全球著名漫画家蔡志忠创作的“EIS元宇宙之门”数字艺术品限量发售!11.29正式开售

开启宇宙之门 2022年12月3日&#xff0c;EIS我们将一起迎接一个新的爆发机会——品牌将正式接轨元宇宙一个全新的营销时代即将来临&#xff01;首次集结千位元宇宙领域品牌营销头号玩家&#xff0c;找到通往元宇宙智慧的不二法门&#xff01; 品牌营销领域一次全新的风向标&am…

SPARK数据分析

有了 DataFrame 之后&#xff0c;我们该如何在 DataFrame 之上做数据探索、数据分析&#xff0c;以及各式各样的数据转换呢&#xff1f;在数据处理完毕之后&#xff0c;我们又该如何做数据展示与数据持久化呢&#xff1f;今天这一讲&#xff0c;我们就来解答这些疑问。 为了给开…

[附源码]计算机毕业设计springboot创新创业管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

操作系统01_进程管理_---软考高级系统架构师006

操作系统的考点;可以看到这里有进程管理 2.存储管理 3.设备管理 4.文件管理 其中比较重要的是进程管理&#xff0c;进程管理中的进程三态图,前趋图,同步与互斥,PV操作,死锁,线程,这个地方考的比较多 ---------------------- 进程的组成: 进程控制块PCB,是进程的唯一标志 T…

阿里云服务器公网带宽计费模式:固定带宽和按使用流量详解

阿里云服务器公网带宽计费模式按固定带宽和按使用流量哪个划算&#xff1f;按固定带宽计费1M带宽一个月23元&#xff0c;按使用流量计费1GB流量0.8元&#xff0c;如果云服务器带宽使用率低于10%&#xff0c;那么首选按使用流量计费&#xff0c;如果带宽实际利用率较高的话&…

自学软件测试必备的英文单词【1500道加语法】

电脑专业英语1500词《电脑专业英语》 1. file n.文件&#xff1b;v.保存文件 2. command n.命令&#xff0c;指令 3. use v.使用&#xff0c;用途 4. program n.程序 5. line n. (数据&#xff0c;程序)行&#xff0c;线路 6. if conj.如果 7. display vt.显示&#xff…

5. 虚拟化特性介绍

5.1 通用虚拟化特性 虚拟化集群特性&#xff08;1&#xff09; 集群&#xff08;cluster&#xff09;&#xff1a;单纯地从集群的角度或用途来说&#xff0c;集群属于网格计算。大家把各自的资源&#xff08;如&#xff1a;服务器提供了自己的计算资源、网络资源、存储资源&am…

BUUCTF Misc 来首歌吧 荷兰宽带数据泄露 面具下的flag 九连环

来首歌吧 下载文件 使用Audacity打开 可以发现框出来的一串,放大查看 有长有短有空格&#xff0c;大概率是摩斯密码 ...../-.../-.-./----./..---/...../-..../....-/----./-.-./-.../-----/.----/---../---../..-./...../..---/./-..../.----/--.../-../--.../-----/----./.…

unity资源管理之Addressable

unity自带了AssetsBundle的机制&#xff0c;Addressable是在AssetsBundle的机制上封装了一下。 主要做了以下封装&#xff1a; 1.编辑器&#xff1a;根据项目需求,编写编辑器扩展,提供指定资源打入对应bundle包的策略; 2.可以自主加载和释放资源&#xff1a;根据项目的需求,…

【MySQL】数据库服务器硬件优化与实战详解(调优篇)(实战篇)(MySQL专栏启动)

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码&#xff0c;就职于大型金融公司后端高级工程师&#xff0c;擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x1…

[附源码]计算机毕业设计springboot-菜篮子系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

D-017 SWD硬件电路设计

SWD硬件电路设计1 简介2 JTAG和SWD的区别2 设计要点3 电路实战1 简介 SWD(SERIAL WIRE DEBUG)是一种串行线调试,是ARM设计的协议&#xff0c;主要功能是对微控制器进行编程和调试。 相关引脚说明&#xff1a; PIN脚描述SWDIO串行数据线&#xff0c;用于数据的读出和写入。SW…

Nodejs -- CORS的介绍及使用CORS解决Express请求跨域的问题

文章目录CORS 跨域资源共享1 接口的跨域问题2 使用cors中间件解决跨域问题3 什么是CORS4 CORS的注意事项5 CORS响应头部 - Access-Control-Allow-Origin6 CORS响应头部 - Access-Control-Allow-Headers7 CORS响应头部 - Access-Control-Allow-Methods8 CORS请求的分类9 简单请求…

R语言隐马尔可夫模型HMM识别股市变化分析报告

了解不同的市场状况如何影响您的策略表现可能会对您的收益产生巨大的影响。最近我们被客户要求撰写关于HMM的研究报告&#xff0c;包括一些图形和统计输出。 某些策略在波动剧烈的市场中表现良好&#xff0c;而其他策略则需要强劲而平稳的趋势&#xff0c;否则将面临长时间的下…

使用Spark的foreach算子及UDTF函数实现MySQL数据的一对多【Java】

使用Spark的foreach算子及UDTF函数实现MySQL数据的一对多【Java】 背景 我们的数仓项目中遇到了这样一种场景&#xff0c;脱敏后内容大致如下&#xff1a; col1col2time1time2a1b12022-01-01 00:00:002022-01-05 00:00:00a2b22022-01-28 00:00:002022-02-03 00:00:00a3b3202…

53-54 - 被遗弃的多重继承

---- 整理自狄泰软件唐佐林老师课程 1. 问题 C是否允许一个类继承自多个父类&#xff1f; 1.1 C中的 多重继承 C支持编写多重继承的代码 一个子类可以拥有多个父类子类拥有所有父类的成员变量子类继承所有父类的成员函数子类对象可以当作任意父类对象使用 1.2 多重继承的语…

PC_非连续内存分配方式@分页存储管理@地址变换机构@快表

文章目录非连续内存分配方式&#x1f388;分页存储管理基本分页存储管理页面和页面大小分块和碎片逻辑地址结构页表页表项结构页表项和地址比较&#x1f388;页表项地址地址变换机构基本地址变换机构结构图映射过程Note:页表长度页表项长度页表大小例小结ref具有快表的地址变换…

Django学习第一天

学习建议 先从看视频学习开始&#xff0c;网上学习Django的视频有很多&#xff0c;然后跟着视频多多练习并且做一些小项目来加深印象和理解。 注意&#xff1a; 要学习Django前&#xff0c;必须先学习python基础&#xff0c;因为Django是基于python这门语言而开发的&#xff0…

openEuler快速入门-Navicat远程链接openGauss数据库

文章目录前言一、环境准备二、openGauss服务设置步骤2.1 切换至用户openGauss2.2添加放行IP2.3 修改加密方式3.4 重启openGauss服务3.5 创建远程连接角色备注总结前言 最近这段时间再整理openGauss数据库相关内容&#xff0c;在这里总结记录并分享一些基础的操作以及遇到的一些…

与堆和堆排序相关的问题

与堆和堆排序相关的问题 作者&#xff1a;Grey 原文地址&#xff1a; 博客园&#xff1a;与堆和堆排序相关的问题 CSDN&#xff1a;与堆和堆排序相关的问题 堆结构说明 堆结构就是用数组实现的完全二叉树结构&#xff0c;什么是完全二叉树&#xff1f;可以参考如下两篇博…