目录

4.1指令系统

4.1.1指令集体系结构

4.1.2指令的基本格式

1.零地址指令

2.一地址指令

3.二地址指令

4.三地址指令

5.四地址指令

4.1.3定长操作码指令格式

4.1.4扩展操作码指令格式

4.1.5指令的操作类型

1.数据传送

2.算术和逻辑运算

3.移位操作

4.转移操作

5.输入输出操作

4.2指令的寻址方式

4.2.1指令寻址和数据寻址

1.指令寻址

(1)顺序寻址

(2)跳跃寻址

2.数据寻址

4.2.2常见的数据寻址方式

1.隐含寻址

2.立即(数)寻址

3.直接寻址

4.间接寻址

5.寄存器寻址

6.寄存器间接寻址

7.相对寻址

8.基址寻址

9.变址寻址

10.堆栈寻址

4.3程序的机器级代码表示

4.3.1常用汇编指令介绍

1.相关寄存器

2.汇编指令格式

3.常用指令

(1)数据传送指令

(2)算术和逻辑运算指令

4.3.2选择语句的机器级表示

4.3.3循环语句的机器级表示

4.3.4过程调用的机器级表示

4.4 CISC和RISC的基本概念

4.4.1复杂指令系统计算机(CISC)

4.4.2精简指令系统计算机(RISC)

4.4.3CISC和RISC的比较

4.5本章小结



4.1指令系统

4.1.1指令集体系结构

机器指令(简称指令)是指示计算机执行某种操作的命令。一台计算机的所有指令的集合构成该机的指令系统,也称指令集。指令系统是指令集体系结构(ISA)中最核心的部分,ISA完整定义了软件和硬件之间的接口,是机器语言或汇编语言程序员所应熟悉的。

ISA规定的内容主要包括:

1)指令格式,指令寻址方式,操作类型,以及每种操作对应的操作数的相应规定。

2)操作数的类型,操作数寻址方式,以及是按大端方式还是按小端方式存放。

3)程序可访问的寄存器编号、个数和位数,存储空间的大小和编址方式。

4)指令执行过程的控制方式等,包括程序计数器、条件码定义等。

ISA规定了机器级程序的格式,机器语言或汇编语言程序员必须对机器的ISA非常熟悉。不过,大多数程序员不会用汇编语言或机器语言编写程序,通常用高级语言(如C/C++/Java)编写程序,这样开发效率更高,也不易出错。但是,高级语言抽象层太高,隐藏了许多机器级程序的细节,使得高级语言程序员不能很好地利用与机器结构相关的一些优化方法来提升程序的性能。若程序员对ISA和底层硬件实现细节有充分的了解,则可以更好地编制高性能程序。


4.1.2指令的基本格式

一条指令就是机器语言的一个语句,它是一组有意义的二进制代码。一条指令通常包括操作码字段和地址码字段两部分:

操作码字段

地址码字段

其中,操作码指出该指令应执行什么操作以及具有何种功能。操作码是识别指令、了解指令功能及区分操作数地址内容等的关键信息。例如,指出是算术加运算还是算术减运算,是程序转移还是返回操作。地址码给出被操作的信息(指令或数据)的地址,包括参加运算的一个或多个操作数的地址、运算结果的保存地址、程序的转移地址、被调用子程序的入口地址等。

指令字长是指一条指令所包含的二进制代码的位数,其取决于操作码的长度、地址码的长度和地址码的个数。指令字长与机器字长没有固定的关系,它既可以等于机器字长,又可以大于或小于机器字长。通常,把指令长度等于机器字长的指令称为单字长指令,指令长度等于半个机器字长的指令称为半字长指令,指令长度等于两个机器字长的指令称为双字长指令。

指令长度的不同会导致取指令时间开销的不同,单字长指令只需访存1次就能将指令完整取出;而双字长指令则需访存2次才能完整取出,耗费2个存取周期。

在一个指令系统中,若所有指令的长度都是相等的,则称为定长指令字结构。定字长指令的执行速度快,控制简单。若各种指令的长度随指令功能而异,则称为变长指令字结构。然而,因为主存一般是按字节编址的,所以指令字长通常为字节的整数倍。

根据指令中操作数地址码的数目的不同,可将指令分成以下几种格式。

◆根据指令格式及相关编码条件组合成机器代码

1.零地址指令

只给出操作码OP,没有显式地址。这种指令有两种可能:

1)不需要操作数的指令,如空操作指令、停机指令、关中断指令等。

2)零地址的运算类指令仅用在堆栈计算机中。通常参与运算的两个操作数隐含地从栈顶和次栈顶弹出,送到运算器进行运算,运算结果再隐含地压入堆栈。

2.一地址指令

这种指令也有两种常见的形态,要根据操作码的含义确定究竟是哪一种。

1)只有目的操作数的单操作数指令,按A₁地址读取操作数,进行OP操作后,结果存回原地址。

指令含义:OP(A₁)→A₁

如操作码含义是加1、减1、求反、求补、移位等。

2)隐含约定目的地址的双操作数指令,按指令地址A₁可读取源操作数,指令可隐含约定另一个操作数由ACC(累加器)提供,运算结果也将存放在ACC中。

指令含义:(ACC)OP(A₁)→ACC

◆地址位数与寻址范围的关系

若指令字长为32位,操作码占8位,1个地址码字段占24位,则指令操作数的直接寻址范围为2²⁴=16M。若地址码字段均为主存地址,则完成一条一地址指令需要3次访存(取指令1次,取操作数1次,存结果1次)。

3.二地址指令

指令含义:(A₁)OP(A₂)→A₁

对于常用的算术和逻辑运算指令,往往要求使用两个操作数,需分别给出目的操作数和源操作数的地址,其中目的操作数地址还用于保存本次的运算结果。若指令字长为32位,操作码占8位,两个地址码字段各占12位,则每个操作数的直接寻址范围为2¹²=4K。若地址码字段均为主存地址,则完成一条二地址指令需要4次访存(取指令1次,取两个操作数2次,存结果1次)。

4.三地址指令

指令含义:(A₁)OP(A₂)→A₃

若指令字长为32位,操作码占8位,3个地址码字段各占8位,则每个操作数的直接寻址范围为2⁸=256。若地址码字段均为主存地址,则完成一条三地址需要4次访问存储器(取指令1次,取两个操作数2次,存结果1次)。

5.四地址指令

指令含义:(A₁)OP(A₂)→A₃,A₄=下一条将要执行指令的地址。

若指令字长为32位,操作码占8位,4个地址码字段各占6位,则每个操作数的直接寻址范围为2⁶=64。若地址码字段均为主存地址,则完成一条四地址指令需要4次访存(取指令1次,取两个操作数2次,存结果1次)。


4.1.3定长操作码指令格式

命题追定长操作码的指令条数(2015)

定长操作码指令在指令字的最高位部分分配固定的若干位(定长)表示操作码。一般n位操作码字段的指令系统最大能够表示2”条指令。定长操作码对于简化计算机硬件设计,提高指令译码和识别速度很有利。当计算机字长为32位或更长时,这是常规用法。


4.1.4扩展操作码指令格式

◆扩展操作码的设计与分析

为了在指令字长有限的前提下仍保持比较丰富的指令种类,可采取可变长度操作码,即全部指令的操作码字段的位数不固定,且分散地放在指令字的不同位置上。显然,这将增加指令译码和分析的难度,使控制器的设计复杂化。最常见的变长操作码方法是扩展操作码,它使操作码的长度随地址码的减少而增加,不同地址数的指令可具有不同长度的操作码,从而在满足需要的前提下,有效地缩短指令字长。图4.1所示即为一种扩展操作码的安排方式。

在图4.1中,指令字长为16位,其中4位为基本操作码字段OP,另有3个4位长的地址字段A₁、A₂和A₃。4位基本操作码若全部用于三地址指令,则有16条。图4.1中所示的三地址指令为15条,1111留作扩展操作码之用;二地址指令为15条,11111111留作扩展操作码之用;一地址指令为15条,111111111111留作扩展操作码之用;零地址指令为16条。

除这种安排外,还有其他多种扩展方法,如形成15条三地址指令、12条二地址指令、63条一地址指令和16条零地址指令,共106条指令,请读者自行分析。在设计扩展操作码指令格式时,必须注意以下两点:

1)不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同。

2)各指令的操作码一定不能重复。

通常情况下,对使用频率较高的指令分配较短的操作码,对使用频率较低的指令分配较长的操作码,从而尽可能减少指令译码和分析的时间。


4.1.5指令的操作类型

设计指令系统时必须考虑应提供哪些操作类型,指令操作类型按功能可分为以下几种。

1.数据传送

传送指令通常有寄存器之间的传送(MOV)、从内存单元读取数据到CPU寄存器(LOAD)、从CPU寄存器写数据到内存单元(STORE)、进栈操作(PUSH)、出栈操作(POP)等。

2.算术和逻辑运算

这类指令主要有加(ADD)、减(SUB)、乘(MUL)、除(DIV)、加1(INC)、减1(DEC)、与(AND)、或(OR)、取反(NOT)、异或(XOR)等。

3.移位操作

移位指令主要有算术移位、逻辑移位、循环移位等。

4.转移操作

◆转跳指令、调用和返回指令、条件转移指令的区分

转移指令主要有无条件转移(JMP)、条件转移(BRANCH)、调用(CALL)、返回(RET)、陷阱(TRAP)等。无条件转移指令在任何情况下都执行转移操作,而条件转移指令仅在特定条件满足时才执行转移操作,转移条件一般是某个标志位的值,或几个标志位的组合。调用指令和转移指令的区别:执行调用指令时必须保存下一条指令的地址(返回地址),当子程序执行结束时,根据返回地址返回到主程序继续执行;而转移指令则不返回执行。

5.输入输出操作

这类指令用于完成CPU与外部设备交换数据或传送控制命令及状态信息。




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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RAG面试内容整理-检索器与生成器的解耦架构

在RAG系统中,检索器(Retriever)与生成器(Generator)的解耦架构是实现灵活高效的关键设计。所谓解耦,即将检索相关文档和生成答案两个步骤分开,由不同的模块或模型负责。这种架构带来的直接好处是模块独立优化:我们可以针对检索任务微调或更换检索模型,而不必影响生成模…

【2026毕业论文鸿蒙系统毕设选题】最新颖的基于HarmonyOS鸿蒙毕业设计选题汇总易过的精品毕设项目分享(建议收藏)✅

文章目录前言最新毕设选题(建议收藏起来)最新颖的鸿蒙毕业设计选题汇总100套易过的精品毕设项目分享毕设作品推荐👇👇👇文未可免费咨询毕设相关问题,点赞留言可送系统源码👇👇&#…

超全!Linux 面试 100 题精选解析:网络篇|16 个 Linux 网络排查与配置必考题详解

网络,是 Linux 系统的神经系统。 一台服务器再强大,没有网络连接也如孤岛。尤其在实际运维与面试场景中,“网络相关的问题”是高频重灾区,比如: IP 配置错乱,连不上公网DNS 无响应,域名解析失败…

在 CentOS 上安装 FFmpeg

在 CentOS 上安装 FFmpeg 可以通过以下两种推荐方法实现(以 CentOS 7/8 为例): 方法一:通过 RPM Fusion 仓库安装(推荐) # 1. 安装 EPEL 仓库 sudo yum install epel-release# 2. 启用 RPM Fusion 仓库 # C…

数据结构——图(一、图的定义)

一、图的定义1、什么是图?图G(V,E) 如图,无向图G顶点集V{,,...,},用|V|表示图G的顶点个数如:V{A,B,C,D} ,|V|4边集E{(u,v)|uV, vV}, 用|E|表示图G的边的条数如:E{(u,v)|(A,B),(A,D),(A,C),(C,D)}&#xf…

Python 列表推导式与生成器表达式

Python 列表推导式与生成器表达式在 Python 中,列表推导式(List Comprehension)和生成器表达式(Generator Expression)是处理序列数据的高效工具。它们不仅能简化代码,还能提升数据处理的效率。本文将详细介…

XCF32PVOG48C Xilinx Platform Flash PROM

XCF32PVOG48C 是 Xilinx 公司推出的一款高容量、低功耗的 Platform Flash PROM(平台闪存配置芯片),专为 Xilinx FPGA 和 CPLD 系列产品提供非易失性配置存储支持。凭借其 32 Mbit 的大容量与出色的系统兼容性,该芯片成为中高端 FP…

重复文件清理工具,附免费链接

链接:https://pan.baidu.com/s/1s_Zx1eHp5Y-XnbbGldIgvw?pwdkjex 提取码:kjex 复制这段内容后打开百度网盘手机App,操作更方便哦

【Spring Boot 快速入门】二、请求与响应

目录请求响应请求Postman 工具简单参数请求实体参数请求数组集合参数日期参数JSON 参数路径参数响应请求响应 请求 Postman 工具 Postman 是一款功能强大的网页调试与发送网页 HTTP 请求的 Chrome 插件 作用:常用于进行接口测试 简单参数请求 原始方式 在原始的…

高并发系统技术架构

(点个赞,算法会给你推荐更多类似干货 ~) 口诀: CDN 扛静态,WAF 防恶意;验证码拦机器; Nginx 先限流,Sentinel 再熔断; Redis 扣库存,MQ 异步写; 对…

python任意模块间采用全局字典来实现借用其他类对象的方法函数来完成任务或数据通信的功能

我们在编写pthon代码时,模块间的数据通信主要采用以下几种方法:1、采用全局变量。所有模块都通过引用全局变量,通过本模块对此全局变量数据的修改值,其他模块也能访问并得到此全局变量的当前值,由于全局变量的不可控性…

linux 部署 flink 1.15.1 并提交作业

下载 1.15.1 https://flink.apache.org/downloads.html#apache-flink-1151 部署模式分类 会话模式应用模式单作业模式 1、会话模式 先启动一个集群,保持一个会话,然后通过客户端提交作业,所有作业都在一个会话执行; 会话模式适合规…

Redis数据量过大的隐患:查询会变慢吗?如何避免?

一、Redis数据过多引发的五大隐患(附系统交互图) #mermaid-svg-X83bpHUu830QXKUt {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-X83bpHUu830QXKUt .error-icon{fill:#552222;}#mermaid-svg-…

网络与信息安全有哪些岗位:(3)安全运维工程师

安全运维工程师是企业安全防线的 “日常守护者”,既要确保安全设备与系统的稳定运行,又要实时监控潜在威胁,快速响应并处置安全事件,是连接安全技术与业务运营的关键角色。其核心价值在于通过常态化运维,将安全风险控制…

鱼皮项目简易版 RPC 框架开发(三)

本文为笔者阅读鱼皮的项目 《简易版 RPC 框架开发》的笔记,如果有时间可以直接去看原文, 1. 简易版 RPC 框架开发 前面的内容可以笔者的前面两个篇笔记 鱼皮项目简易版 RPC 框架开发(一) 鱼皮项目简易版 RPC 框架开发(…

嵌入式Linux:注册线程清理处理函数

在 Linux 多线程编程中,线程终止时可以执行特定的清理操作,通过注册线程清理函数(thread cleanup handler)来实现。这类似于使用 atexit() 注册进程终止处理函数。线程清理函数用于在线程退出时执行一些资源释放或清理工作&#x…

【Git】Linux-ubuntu 22.04 初步认识 -> 安装 -> 基础操作

文章目录Git 初识Git 安装Linux-centosLinux-ubuntuWindowsGit 基本操作配置 Git认识工作区、暂存区、版本库添加文件 -- 场景一查看 .git 文件添加文件 -- 场景二修改文件版本回退撤销修改情况一:对于工作区的代码,还没有 add情况二:已经 ad…

轻量级音乐元数据编辑器Metadata Remote

简介 什么是 Metadata Remote (mdrm) ? Metadata Remote 是一个基于 Web 的音频元数据编辑工具,旨在简化在无头服务器(即没有图形用户界面的服务器)上编辑音频文件的元数据。用户只需使用 Docker 和浏览器,无需复杂的…

免费使用|共享服务器上线RTX3080(20GB显存)

共享服务器也上架GPU啦 生物信息学中有很多用到GPU的场景,例如我们分享过的:利用GPU加速TensorFlow、部署本地DeepSeek,空间转录组学习手册合辑加速。因此多种GPU供大家选择:RTX5090、4080S、5070显卡上机。为了让此前的CPU服务器…

搭建DM数据守护集群

1环境与规划准备3个kylin 10操作系统的虚拟机,规划IP、端口、安装目录等。说明搭建REALTIME归档模式、事务一致性的数据守护名称项初始主库机器dm1初始备库机器dm2监视器机器dmmon外部业务IP192.168.23.129192.168.23.130192.168.23.131内部心跳IP192.168.23.129192…