指令的类型

news/2024/7/5 4:50:13

目录

1. 传送类指令

2. 输入/输出(I/O)类指令

3. 算术逻辑运算类指令

4. 程序控制类指令


  • 传送类指令
  • 输入/输出(I/O)类指令
  • 算术逻辑运算类指令
  • 程序控制类指令

1. 传送类指令

将源地址里保存的数据传送到目的地址中保存,传送类指令一般常用助记符 MOV 表示。

用户在编程中能够指定的源端和目的端:

2. 输入/输出(I/O)类指令

主机与外设之间交换信息:

输入/输出(I/O)类指令实现主机和各外围设备之间的信息传输,输入和输出都以主机为参考点。

  • 将信息送入主机,称为输入
  • 将信息送至外围设备,称为输出

外围设备通过I/O接口与系统总线连接,数据的发送/接收者是I/O接口中的寄存器,主机对外围设备的访问就是对有关接口寄存器的访问。

外围设备一般受CPU控制,因此CPU需要通过输出指令向I/O接口送出命令信息,再由接口产生相应的命令发送给外围设备。

  • 控制寄存器:主机用输出指令或传送指令,将具体设备的控制命令按约定的代码格式送往接口中的控制寄存器,向外设发出命令。
  • 状态寄存器:外设的状态信息以某种格式放在接口的状态寄存器中,主机用输入指令或传送指令从状态寄存器中取出有关信息进行查询、分析,以确定主机下一步的工作。
  • 数据寄存器:主机与外设之间传输的数据存放于数据寄存器。 

主机如何与外设连接?

 先给出端口地址(你要用哪些寄存器),再给出控制信号(你是要读还是要写)。

得到端口地址后,我们通过 译码器 来选择相应的寄存器:

译码器的输出端与一个三态门相连,成为寄存器的控制端。当且仅当控制端有效时,数据才能存入寄存器中。比如 A = 0,B = 0,C = 1,那么数据将写入第二个寄存器中。


I/O设备的编址方法:

(1)单独编址

早期方法是为每台设备分配一个设备码,I/O指令中指明设备码和寄存器;常用方法是为每个寄存器(I/O端口)分配独立的端口地址,I/O指令中给出端口地址。例如,存储空间容量为64K:

  • 主存编址:0000H ~ FFFFH
  • 端口编址:FF00H ~ FFFFH

单独编址的特点:

  • 端口地址的数量远少于存储单元地址的数量
  • I/O地址空间不占主存空间
  • I/O地址可与主存地址重叠

计算机不能根据地址码本身区分存储单元和I/O端口,即I/O接口寄存器。

在处理器的指令集中,需要有专门的I/O指令(非数据传送指令)来完成端口的读写操作,又称为 显式I/O指令。例如:

处理器通过对操作码 INOUT 的译码来判断出是I/O指令。对于主存,我们使用操作码 MOV 来完成输入/输出操作。

(2)统一编址 

I/O端口地址占CPU提供的全部地址空间的其中一部分。比如,可将地址空间的低端部分分配给主存单元,高端部分分配给I/O端口,以示区分。

采用统一编址,计算机可根据地址码本身区分是存储单元地址还是I/O端口地址,无需其它控制,对存储单元或I/O端口的读写不会发生混乱。

统一编址时,将设备接口中的寄存器视为一个存储单元,采用 通用的数据传送指令 实现I/O操作,又称为 隐式I/O指令

在指令集中,无需专门的输入/输出指令,采用一般数据传送指令即可进行端口的读写操作:

处理器无需专门的信号来区分是访问存储器还是访问I/O端口,译码电路对地址码的译码即可区分出是读写存储器单元还是读写I/O端口。 

3. 算术逻辑运算类指令

(1)算术运算指令

加(ADD)、减(SUB)、乘(MUL)、除(DIV)、求补(NEG)、加1(INC)、减1(DEC)、…

(2)逻辑运算指令

与(AND)、或(OR)、非(COM)、异或(EOR)、…

实现对代码位的设置、测试、清除、修改等。

运算结束后大部分会自动设置相应状态标志。 

4. 程序控制类指令

(1)转移指令

  • 无条件转移:操作码  转移地址
  • 条件转移:操作码  转移地址  转移条件

(2)转子指令与返回指令

  • 转子指令:操作码  子程序入口
  • 返回指令:操作码

子程序就是我们常说的函数,每个子程序的最后一条指令都是返回指令。以C语言为例,对于有返回值的函数,我们会在最后写上 return ... 进行返回;对于没有返回值的函数,在最后也会隐藏一条 return ; 进行返回。

用堆栈存放返回地址:

在高级语言中,函数名就是子程序的入口地址,我们假设这里的Add是一个函数名。取完Add指令,PC + n,PC指向下一条指令,再把PC压入堆栈中。在Add执行结束后,再把PC弹出来。

(3)软中断指令

早期主要用于程序调试,现在常用于系统功能调用。 

和转子指令与返回指令的区别:软中断指令具有随机性,比如我们可以随机设置程序断点。

(4)控制指令 

  •  CLC 清除进位标志
  •  NOP 空操作指令
  •  HLT 暂停指令
  • ...


CPU内部结构:  


http://lihuaxi.xjx100.cn/news/45265.html

相关文章

java计算机毕业设计网上书店进销存管理系统源程序+mysql+系统+lw文档+远程调试

java计算机毕业设计网上书店进销存管理系统源程序mysql系统lw文档远程调试 java计算机毕业设计网上书店进销存管理系统源程序mysql系统lw文档远程调试本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开发软件:idea eclipse…

数据库管理工具Navicat16版本,功能优化全新详解

Navicat16版本具备多项改进和新功能,能满足你对数据库开发的需求。Navicat拥有过百种增强功能和耳目一新的界面,为你提供构建、管理和维护数据库的新方法,提升你的工作表现 一、崭新的设计 相比上一个版本,Navicat16带来了许多U…

windows下Mysql多实例部署

当存在多个项目的时候,需要同时部署时,且只有一台服务器时,哪么就需要部署Mysql多个实例,原理很简单,多个mysql服务运行使用不同的配置及数据管理。 具体操作如下: 1、找到mysql.ini配置并复制为一个新的…

Zookeeper 集群安装

一、Java环境的安装 1. 下载jdk Java Downloads | Oracle 2. 解压并配置环境变量 # 上传到/usr/local目录下 tar -zxvf jdk-8u341-linux-x64.tar.gz # 配置Java环境变量 vi /etc/profile export JAVA_HOME/usr/local/jdk1.8.0_341 export PATH$PATH:$JAVA_HOME/bin #验证是否…

SpringMVC-02 MVC模式介绍

文章目录1 Java Web开发模型2 JSPJavaBean开发模型(model1)3 MVC开发模式(model2)3.1 MVC模式基础3.1.1 模型、视图、控制器各部分的作用3.1.2 MVC与三层结构3.2 MVC发展3.2.1 ServletJSPJavaBean的模型3.2.2 Strust13.2.2 Strust…

rust的struct

定义struct 使用struct关键字,并为整个struct命名在花括号内,为所有字段(field)定义名称和类型 struct User{username: String,email: String,sign_in_count: u64,active: bool, }实例化struct 想要使用struct,需要…

vue+element-ui

一.使用图形化界面,创建vue项目 vue ui(在根目录下,打开cmd,启动图形化界面) 添加插件 添加element-ui插件 这里选择import on demand 安装好了 添加依赖 添加axios依赖 添加好了 二.创建Git仓库,连接并上传刚刚创建的项目 在项目文件目录下…

嵌入式开发之led驱动实践

led驱动开发实践 超前的问题,驱动测试成功后,如何使用呢?正常的linux启动流程开机自动加载驱动,可见在启动(5)与(6)间加载驱动再看led灯驱动流程,自底向上分析1. 在最底层c文件定义了灯的操作结构体2. 通过驱动里的init函数调用get_board_led_opr得到led操作3. 将led_d…