计算机组成原理——第四章指令系统(下)

news2024/11/28 4:31:07

本是青灯不归客,却因浊酒恋红尘

文章目录

  • 前言
  • 4.3.1 高级语言与机器级代码之间的对应
  • 4.3.2 常用的X86汇编指令
  • 4.3.3 ATu0026T格式和Intel格式
  • 4.3.4 选择语句的机器级表示
  • 4.3.5 循环语句的机器级表示
  • 4.4 CiSC和RiSC


前言

接下来这部分主要讲的就是高级语言与汇编语言的对应关系,高级语言通过编译程序(编译器)编译成汇编程序,再通过汇编程序变成二进制的机器语言,一条高级语言可能对应多个编译语言,一个编译语言对应一条机器语言,机器级代码包含机器语言和汇编语言,通常给出某段简单程序的C语言,汇编语言,机器语言表示,能集合C语言看懂汇编语言的关键语句(看懂常用指令,选择结构,循环结构,函数调用即可)

4.3.1 高级语言与机器级代码之间的对应

请添加图片描述
以mov指令为例
如下图,蓝色标注的是寄存器,紫色标注的是立即数,绿色标注的同时打一个中阔号这是指一个内存地址,而在其前面的红色字体的dword和byte则表示的是内存中读取几个字节,如下中我们在寄存器中直接指明了两个名字的寄存器进行操作,这是不是就是寄存器寻址,第二句中,前部分就是寄存器寻址,后部分就是立即寻址,第三句中后面的那个操作数就是直接寻址
请添加图片描述
寄存器
如下图你会发现寄存器的都是以E开头的,在x86的cpu中寄存器是以E开头的那么这个寄存器的总长就是32bit,通用寄存器都是以X进行结尾
请添加图片描述
相对于变址寄存器和堆栈基指针,堆栈顶指针相比,通用寄存器更灵活,我们若是名字使用的时候去掉E也就是AX,BX,CX,DX 则表示使用的是低16bit,甚至我们可以划分的更小一些,划分8bit也是可以的
请添加图片描述
之前我们说过中括号里面的是主存地址,但是下面这个图中你会发现中括号中的是一个寄存器,若是你能联想本章的前部分,你可能会想到这里是寄存器间接寻址,h的后缀表示是一个16进制的
请添加图片描述
本节总结
此图对应开头的两个问题,并做出了回答
请添加图片描述

4.3.2 常用的X86汇编指令

本节探讨的常见的指令有哪些,每一个指令是对数据进行什么样的处理,这里主要讲的算数运算,逻辑运算
d:destination目的
s:source来源地
这里需要特别注意一个除法,你会发现只有一个操作数,这里的是除数,而被除数是被提前存放于edx和eax中,这里也就是隐含寻址,edx:eax的意思是有的时候需要进行位扩展,进行除法运算
请添加图片描述
王道书上讲解
这里同样需要注意左边这个数不能是常量,还有就是X86中不允许两个操作数同时来自于主存,因为访问主存的次数越多,速度自然也就越慢
请添加图片描述

4.3.3 ATu0026T格式和Intel格式

之前我们学过的X86汇编语言,分为两种格式,前面学习的就是intel格式(Windows的常用格式),这里讲一下AT&T格式(Unix,Linnx的常用格式),最大的一个区别是源操作数和目的操作数的位置是相反的
请添加图片描述

4.3.4 选择语句的机器级表示

ip计数器其实也就是程序计数器PC ,jum指令和我们之前学过的指令是一样的,这个地址就是jum的操作数,而这个操作数无非就是来自于寄存器,主存,常数,但是程序员怎么能知道最终这个操作数被存放于什么地址,就算知道书写也太过麻烦,而且不方便挪动代码,一个解决方案就是用一个标号去锚定一个位置,就是有点像C语言中的goto语句,
请添加图片描述

条件转移指令
通常条件转移指令要配合cmp来一起使用
请添加图片描述

4.3.5 循环语句的机器级表示

请添加图片描述
除了循环之外在X86中还有一个loop指令,这个指令特殊之处在于会自动的对ecx进行减减的操作,所以这里不能使用其他的寄存器来代替ecx,用ecx中的值来判断是否需要继续进行循环
请添加图片描述

4.4 CiSC和RiSC

这两个有些类似一个只给你提供了一个简单的语句,另外一个给你提供许多封装好的函数
CISC复杂指令集系统:一条指令完成一个复杂的基本功能
RISC精简指令集系统:一条指令完成一个基本“动作”多条指令组合完成一个复杂的基本功能
这里如下图想到之前我们提到的 直接寻址使用的就是CISC的指令系统,
指令流水线:因为CISC中各个指令的执行时间相差较大,指令流水线的实现比较复杂,但是也可以通过一定的方式实现,RISC各个指令执行时间在一个周期基本上都能完成,也就实现流水线比较方便,并且效率会更高,
请添加图片描述

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

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

相关文章

Thymeleaf select回显并选中多个

语法: selected"selected" 或 selectedtrue ${#strings.indexOf(name,frag)} 或者 ${#lists.contains(list, element)} 或者 ${#strings.contains(name,ez)} 或者 ${#strings.containsIgnoreCase(name,ez)} 都可以实现。 多选示例 : &…

linux 集群时间同步

前言 由于搭建hadoop集群需要进行集群时间同步,记录下具体操作过程。 这里我的集群环境为192.168.184.129(主)、192.168.184.130(从)、192.168.184.131(从),设置从机器从主机器同步…

Windows XP设置Outlook电子邮箱

一、问题描述 在Windows XP操作系统中进行Outlook电子邮箱的设置。 二、具体步骤 1、点击“开始”,找到“电子邮件(Outlook Express)并点击: 2、点击“设置邮件账户”。 3、输入自己的姓名,点击“下一步”。 4、…

Hive UDTF、窗口函数、自定义函数

目录 1 UDTF 1.1 概述 1.2 explode 1.3 posexplode 1.4 inline 1.5 Lateral View 2 窗口函数(开窗函数) 2.1 定义 2.2 语法 2.2.1 语法--函数 2.2.2 语法--窗口 2.2.3 常用窗口函数 3 自定义函数 3.1 基本知识 3.2 实现自定义函数 3.2.1 …

RestClient操作文档

RestClient操作文档5.RestClient操作文档5.1.新增文档5.1.1.索引库实体类5.1.2.语法说明5.1.3.完整代码5.2.查询文档5.2.1.语法说明5.2.2.完整代码5.3.删除文档5.4.修改文档5.4.1.语法说明5.4.2.完整代码5.5.批量导入文档5.5.1.语法说明5.5.2.完整代码5.6.小结5.RestClient操作…

JavaSE学习进阶day04_02 Calendar类

第三章 Calendar类 3.1 概述 java.util.Calendar类表示一个“日历类”,可以进行日期运算。它是一个抽象类,不能创建对象,我们可以使用它的子类:java.util.GregorianCalendar类。 有两种方式可以获取GregorianCalendar对象&#…

《Advanced R》学习笔记 | Chapter3 Vectors

专注系列化、高质量的R语言教程推文索引 | 联系小编 | 付费合集本篇推文是学堂君学习第3章“Vectors”的笔记,原文链接是https://adv-r.hadley.nz/vectors-chap.html,可在文末“阅读原文”处直达。通过本章的学习,我们可以更清晰地理解R语言中…

IDPChat:探索基于LLaMA和Stable Diffusion的「开源」中文多模态AI大模型

中文多模态模型 IDPChat 和大家见面了。 随着GPT4、文心一言等的发布,预训练大模型正式开启由单模态向多模态模型演进。多模态的特性为语言模型带来更加丰富的应用场景。 我们认为,未来的AI应用将主要以大模型为核心基石。 而在大模型的领域,…

PFTL101A 2.0KN 3BSE004172R1控制卷取物体时保持物体相互拉长或者绷紧的力

PFTL101A 2.0KN 3BSE004172R1控制卷取物体时保持物体相互拉长或者绷紧的力 ​ 基于单片机的放卷机张力控制系统设计 张力控制,通俗地讲,就是要控制卷取物体时保持物体相互拉长或者绷紧的力。张力应用于最广泛的造纸、纤维、塑料薄膜、电线、印刷品、磁带…

基于SpringBoot的健身房管理系统

有需要请私信或看评论链接哦 可远程调试 基于SpringBoot健身房管理系统一 介绍 此健身房管理系统基于SpringBoot开发,数据库mysql,前端startbootstrap。系统角色分为用户和管理员。用户登录后可查看个人信息,课程报名和课程查询,…

react-5 高阶组件 (HOC)(防抖节流) --- 高阶函数(HOF)(拖拽)

高阶函数:指一类函数,防抖,节流 防抖: 短时间内频繁触发同一事件时,只有最后一次生效. 例如电梯关门的效果 节流: 短时间内频繁触发同一个事件时,在单位时间内,只生效一次。例如lol英雄的大招…

【SpringBoot】面试组合技-天羽屠龙舞,SpringBootApplication注解的作用是什么?SpringBoot怎么实现自动装配的?

SpringBoot源码下载地址:https://github.com/spring-projects/spring-boot/tags 文章目录🍟下载源码🍗环境准备🍖注解解析🍝SpringBootConfiguration注解🍛EnableAutoConfiguration注解🍤AutoC…

Kettle7.0同步数据(简单操作步骤hive-hive)

一、Kettle说明介绍和原理说明 Kettle是一款免费的ETL工具。 ETL分别是“Extract”、“ Transform” 、“Load”三个单词的首字母缩写,也就是代表ETL过程的三个最主要步骤:“抽取”、“转换”、“装载”,但我们平时往往简称其为数据抽取。 ET…

opencv:了解Shi-Tomasi角点检测器及其使用

目标 在本章中,我们将学习另一种角点检测器:Shi-Tomasi角点检测器,并且探索函数cv.goodFeaturesToTrack()的使用方法。 理论 在上一章中,我们学习了Harris角点检测器。后来,在1994年,石屹和托马斯对其进行了一些小的修改,提出了《Good Features to Track》这篇论文,相…

矩阵转置(函数)(C语言实现)

【题目描述】 写一个函数&#xff0c;将一个n*n&#xff08;n<10&#xff09;的二维数组进行转置&#xff0c;即行列交换。要求在主函数中完成输入和输出。 【输入说明】 输入第一行只包括1个数字&#xff0c;表示n&#xff0c;接下来有n行&#xff0c;每行有n个整数。 …

[Java]Session机制

什么是Session Session是另一种记录客户状态的机制&#xff0c;不同的是Cookie保存在客户端浏览器中&#xff0c;而Session保存在服务器上。客户端浏览器访问服务器的时候&#xff0c;服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需…

基于springboot和ajax的简单项目 04.html文件的js用来分页功能,有专门的分页页面html文件(下)

01&#xff0c;因为分页的功能是很多场景都需要使用的&#xff0c;所以可以单独提出来&#xff0c;到时候加载到相关html的div中就好了。 最开始初始化分页html文件&#xff08;page.html&#xff09;的全部代码&#xff1a;&#xff08;直接使用的是ul&#xff0c;li&#xff…

LeetCode算法小抄--快速排序详解及应用

LeetCode算法小抄--快速排序详解及应用快速排序详解及应用代码实现快速选择算法&#xff08;Quick Select&#xff09;-- 变体[215. 数组中的第K个最大元素](https://leetcode.cn/problems/kth-largest-element-in-an-array/)[剑指 Offer II 076. 数组中的第 k 大的数字](https…

LCMXO2-2000HC-4FTG256I FPGA lattice 深力科MachXO2系列超低功耗非易失PLD器件特性及原理图

LCMXO2-2000HC-4FTG256I FPGA lattice 深力科MachXO2系列超低功耗非易失PLD器件特性及原理图 lattice莱迪斯深力科电子 MachXO2系列 LCMXO2-2000HC-4FTG256I 超低密度FPGA现场可编程门阵列&#xff0c;适用于低成本的复杂系统控制和视频接口设计开发&#xff0c;满足了通信、计…

std::condition_variable::wait_for 的几个细节

std::condition_variable::wait_for 的两种重载用法https://blog.csdn.net/smalbig/article/details/130152253 &#xff08;以下简称上篇&#xff09;直观上介绍了 std::condition_variable::wait_for 的使用效果&#xff0c;这篇对没解释清楚的注释、执行结果进行解释。 1.…