计算机流水线在正常程序中的体现(效果可视)

news2024/10/9 4:19:37

众所周知,流水线技术对于软件开发人员不是可见的(visiable),毕竟已经在在机器语言之下,是组成机器语言的基本逻辑

但今天我就带领大家看看我新发现的结果,那就是流水线的可视效果,包括流水线预测技术的侧面体现,当然也是可见的

首先我先声明一下需要的基础,需要懂16位以及32位操作系统下的汇编语言,不懂者当然是不能体会到这篇文章的意图的

知识点来源:x86汇编语言从实模式到保护模式(希望以后大家写博客能标出知识点来源,帮助小白纠正知识是从博客学来的坏习惯,以及给大家一个深入学习的机会)

好了,直接开始看代码(全汇编)

 1    mov eax,cr0 
 2    or eax,1 
 3    mov cr0,eax ;设置PE位    并以32位模式开始译码
 4    
 5    ;以下进入保护模式... ... 
 6    ;jmp dword 0x0008:flush ;16位的描述符选择子:32位偏移 
 7    
 8    ;清流水线并串行化处理器 
 9    [bits 32];将之后的代码全部解析成32位模式代码 
10    flush: 
11    mov cx,0100 ;加载数据段选择子(0x10) 

1-3行就是将16位实模式转换到32位保护模式,并且将16位下的译码模式转换成32位的译码模式

第6行的代码是跳转到flush标签,也就是第10行,不过我在这里先行给它注释

第9行是一条对于编译器有作用的标签,和C语言中的#pragma comment差不多,这里的意思是之后的代码全部编译成32位的汇编

下面是运行时的反汇编代码

 这两条连续的反汇编指令是从汇编代码中的第三行开始的,我把汇编代码以及机器指令一并圈了出来

大家有没有发现不对劲,第二条反汇编指令和我们手写的汇编指令不能说是看不出来,只能说是毫无关联,

明明我们的操作数是cx,这边竟然变成了ecx,还有立即数,明明是0x0010,这边变成了0xd98e0010,也不怪大家看不出来,这换谁都一样

大家都知道,机器是很傻的,我们叫他干啥,他就干啥,这边为什么就没有听我们的话呢

其实就是因为计算机流水线的缘故,大家可以回忆一下流水线的特性(不会等一条指令执行完了,再取下一条指令)

我们再仔细观察一下第二条指令的机器代码, 66 b9 10 00 8e d9

66这这机器指令前缀的作用是16位模式下,将16位寄存器转成32位寄存器,

32位模式下,将32位寄存器转成16位寄存器,

因为32位和16位下的代表寄存器的机器码是一样的,就比如16位下cx是d9,而32位模式下ecx也是d9,那总得有机器码在32位下表示cx吧

就拿上面这条66 b9 10 00 8e d9 举例

32位模式下这条指令是 :mov cx,0x0010(8e,d9之所以没了,就是因为cx装不下,本来这就是下一条指令的内容)

而16位模式下就是:      mov ecx,0xd98e0010

很明显啊,我们的代码使用了16位下的解码方式,但是我们明明已经进入了保护模式

而究其原因就是计算机流水线的缘故了,很明显是我们在mov cr0,eax之前就开始译码(decode)了mov cx,0x0010,而且是以16位模式译码,直接导致了程序的失控

现在我们把汇编代码第6行的注释打开,让jmp生效(虽然我的学过的流水线遇到jmp是不会导致流水线暂停的,但有可能我虚拟机模拟的硬件太老)

 可以看到,这下反汇编指令就是完全正确的了,也的确说明了流水线发生了暂停,不然我们解码肯定会以16位来解码

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

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

相关文章

leetcode 面试题01.04 回文排列

⭐️ 题目描述 🌟 leetcode链接:回文排列 思路:回文串两种可能。只有一个字符出现1次其他字符都是偶数次。要么都是偶数次。统计字母的个数即可。 代码: bool canPermutePalindrome(char* s){// 回文串两种可能// 1. 只有一个字…

几百本常用计算机开发语言电子书链接

GitHub - XiangLinPro/IT_book: 本项目收藏这些年来看过或者听过的一些不错的常用的上千本书籍,没准你想找的书就在这里呢,包含了互联网行业大多数书籍和面试经验题目等等。有人工智能系列(常用深度学习框架TensorFlow、pytorch、keras。NLP、…

JavaWeb银行项目

主要功能 实现了贷款、存款、理财、提现、充值、开户、绑卡、转账等功能。 介绍 1、这个是一个类似有支付宝一样的web项目。 2、登录和注册,都是通过手机号来进行的。 3、注册的新用户需要先进行开户操作,然后进行绑卡操作。 4、在开户的时候回给你…

计算机专业还会继续火热吗

目录 引言 1.计算机专业火热的原因 2.学好计算机需要的技能 3.计算机未来会持续火热吗 4.博主的建议 引言 今年,张雪峰老师在高考志愿填报领域再次火了一把。他主张专业的实用性,建议家长填报那些未来不愁就业的专业,不好就业的专业不要去…

顺序表操作详解

文章目录 一、线性表二、顺序表1、概念2、接口实现1>初始化顺序表2>操作结束后释放空间3>打印顺序表4>尾插5>头插6>头删7>尾删8>顺序表查找9>顺序表在pos位置插入x10>顺序表删除pos位置的值 一、线性表 线性表(linear list&#xff0…

爬取微博热搜榜并进行数据分析

设计方案 爬虫爬取的内容 :爬取微博热搜榜数据。 网络爬虫设计方案概述 用requests库访问页面用get方法获取页面资源,登录页面对页面HTML进行分析,用beautifulsoup库获取并提取自己所需要的信息。再讲数据保存到CSV文件中,进行…

《深度探索c++对象模型》第二章笔记

非原创,在学习 目录 2 构造函数语意学(The Semantics of Constructors) 2.1 Default Constructor的构建操作 “带有Default Constructor”的Member Class Object “带有Default Constructor”的Base Class “带有一个Virtual Function”的Class “带有一个Virtu…

机器学习深度学习——向量求导问题

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——图像分类数据集 📚订阅专栏:机器学习&&深度学习 希望文章对你们有所帮助…

【低代码专题方案】iPaaS运维方案,助力企业集成平台智能化高效运维

01 场景背景 随着IT行业的发展和各家企业IT建设的需要,信息系统移动化、社交化、大数据、系统互联、数据打通等需求不断增多,企业集成平台占据各个企业领域,成为各业务系统数据传输的中枢。 集成平台承接的业务系统越多,集成平台…

详解zookeeper安装使用

目录 1.概述 1.1.功能 1.2.特点 1.3.数据结构 2.安装 2.1.Windows 2.2.Linux 3.基础操作 3.1.增 3.2.删 3.3.改 3.4.查 3.5.监听 4.JAVA操作Zookeeper 4.1.依赖 4.2.客户端 4.3.增 4.4.删 4.5.查 4.6.改 1.概述 1.1.功能 zookeeper,Apache旗下…

pytorch:使用tensorboardX可视化网络模型时add_graph位置报错

1.报错信息 TypeError: graph() got an unexpected keyword argument ‘use_strict_trace’ 提示 graph()这个函数多了一个参数’use_strict_trace’; 也觉得应该是tensorboardX版本问题,但uninstall 再insatall之后也不行,用另一台机子也…

STM32H5开发(3)----电源控制RCC

STM32H5开发----3.电源控制&RCC STM32H503 供电STM32H562/563/573 LDO 供电STM32H562/563/573 SMPS供电LDO/SMPS 供电PWR 特性电源电压监测温度监测低功耗模式低功耗模式-SLEEP 模式低功耗模式-STOP 模式低功耗模式-STANDBY模式低功耗模式监控管脚VBAT模式复位触发源时钟源…

主机漏洞利用演示MS17-010(永恒之蓝)

ms17-010危害:对被攻击方的电脑造成蓝屏! 申明:本篇文章的用意仅做学习使用 网络搭建环境: 软件:Vmware Workstation 17 攻击机:Kali 靶机环境:Windows 7 Nmap软件的基本功能: …

渐进式网络恢复调研

渐进式网络恢复调研 问题定义(PNR) 如果发生重大网络中断(例如由地震、洪水等大规模灾害),运营商必须通过一系列修复步骤来恢复其网络基础设施。优化这个序列以在恢复过程中最大化提供的服务数量的问题通常称为渐进式网络恢复&a…

Phong光照模型原理及着色器实现

现实世界中的照明极其复杂,取决于太多因素,我们无法以有限的处理能力来计算这些因素。 因此,OpenGL 中的光照基于使用简化模型的现实近似值,这些模型更容易处理并且看起来相对相似。 这些照明模型基于我们所理解的光物理学。 其中…

桥接模式-处理多维度变化

程序员小名去摆摊卖奶茶了,口味有香、甜。 型号有大、中、小。假如小名先在家里把这些奶茶装好,那么最少要装2x3 6杯奶茶,如果此时新增一个口味:酸,那么就需要多装3杯奶茶了。而且这样做,等客户买走一种&a…

c++网络编程:Boost.asio源码剖析

1、前言 Boost库是一个可移植、提供源代码的C库,作为标准库的后备,是C标准化进程的开发引擎之一。Boost库由C标准委员会库工作组成员发起,其中有些内容有望成为下一代C标准库内容。在C社区中影响甚大,是不折不扣的“准”标准库。…

HCIA练习4

题目如下: 目录 第一步:IP的规划 第二步:缺省路由 第三步:开启telnet 第四步:编写ACL表 第五步:测试 思路分析: 华为默认允许所有,所以我们可以先写拒绝要求,再写允…

MobaXterm通过SSH访问Ubuntu服务器遇到的一个问题

在Windows下的MobaXterm界面配置完ubuntuIP以后显示access denied,排查发现是因为在ubuntu那边忘记安装了SSH Serve,安装过程如下: 第一步:安装所需包 让我们从打开终端输入一些必要命令开始。 注意,在安装新的包或…

【独家解答】面试题曝光:Spring容器中的Bean会不会被GC?

大家好,我是你们的小米!今天,我们来聊一个有关Spring容器中的Bean的话题,也是面试中经常被问到的问题:“Spring 容器中的Bean是否会被GC呢?为什么?”让我们一起揭开这个神秘的面纱,解…