程序的机器级表示

news2024/10/5 22:25:02

程序的机器级表示

  • 程序编码
  • 数据格式
  • 访问信息的方式

所有的高级语言,都会被计算机翻译为机器代码,然后再根据汇编代码生成可执行的机器代码。二进制的机器代码我们人类肯定是读不懂了,但是汇编代码还是可以简单了解一下的。CPU 的 PC、寄存器、缓存都是怎么工作的,计算机是如何寻址的等等问题,都可以通过汇编代码去了解

程序编码

将高级语言编译成机器语言,计算机才可以根据自身的指令集来执行命令

机器执行的程序只是一个字节序列,是对一系列指令的编码。机器对产生这些指令的源代码几乎一无所知。在 Linux 上,汇编代码文件的后缀名是 .s 文件,二进制的目标代码文件后缀为 .o。对汇编文件会调用汇编器以产生目标代码文件,之后再对目标代码文件调用链接器,为其中的函数调用找到匹配的函数的可执行代码的位置

为了读取上面的 .o 文件,计算机对于使用机器级代码的机器级编程而言,有两种重要抽象:

  • ISA:指令集体系结构或指令集架构,来定义机器级程序的格式和行为。它定义了处理器状态、指令的格式、以及每条指令对状态的影响
  • 虚拟地址:机器级程序使用的内存地址是虚拟地址,所提供的内存模型看起来像是一个非常大的字节数组

ISA 中,指令由操作码和操作数两部分组成。CPU 在设计好之后,其指令集就确定了(硬件厂商处理),CPU 对每条指令都规定了相应的机器码,不同寻址方式的指令,不同运算的指令,它们的机器码都不相同。CPU 刚开始读取指令时并不知道将会执行什么指令,它将指令地址发到地址总线,然后指令将逐字节地通过数据总线传送到 CPU 中,当 CPU 读取到指令中的操作码(前几个字节)时,就知道了当前指令的长度,于是就知道接下来应该读取多少字节的数据作为一条指令和下一条指令的位置

数据格式

数据格式方面,由于是 16bit 体系结构扩展至 32bit,Intel 用术语表示 16bit 数据类型。进而 32bit 称为双字,64bit 称为四字,字节、字、双字、四字分别对应的汇编代码后缀为 b,w,l,q,特别的 float 类型对应的是 s,而 double 对应的则是 l。他们的大小我们在学习 c 语言或者 java 时已经了解过了,就不再叙述了

大多数汇编代码都有这样一个后缀,表面操作数的大小,例如数据传输指令有四个变种,movb(传输字节)、movw(传输字)、movl(传输双字)、movq(传输四字),计算机知道了后面数字的大小,就知道什么位置是下一个指令的开头

我们可能想到一些常见的计算机处理文件大小的方法,例如 TCP 报文用差错校验、特殊的字符作为报文的开头和结尾,并且还有数字表示该报文有多长。CPU 没有采取这些方法,是因为 CPU 读取的指令多而且小,用特殊的字符以此来提高性能

访问信息的方式

一个 x86_64 的中央处理器单元 CPU 包含一组16个存储64位值的通用目的寄存器,以用来存储整数数据和指针。16个寄存器的命名有历史原因,其中有一重要的寄存器为 %rsp(用作栈指针,用来指明运行时栈的结束位置),%rax(返回值寄存器,ret 指令返回的即是 %rax 寄存器中的值)

此外对于寄存器,有一组标准的变成规范控制着如何使用寄存器来管理栈、传递返回值,以及存储局部和临时数据。以下表示的是16个存储寄存器分别的类别:
在这里插入图片描述

对于操作数指示符,也即是目的操作数的概念。其作用是指出执行一个操作中要使用的源数据值,以及放置结果的目的位置。各种不同的操作数可以分为四种:

  • 立即数:用来表示常数值
  • 寄存器数:表示某个寄存器的内容,16个寄存器的低位1字节、2字节、4字节或8字节中的一个作为一个操作数。访问寄存器比访问内存要快得多
  • 内存引用:根据计算得到的地址(通常是有效的物理内存地址而不是虚拟内存地址)访问某个内存位置
  • 以上混合使用:我们可以使用立即数当作寄存器的指针,因此获取寄存器中的数据,也可以使用寄存器中的数据或者立即数当作指针,来访问内存中对应地址的数据

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

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

相关文章

ATTCK覆盖度97.1%!360终端安全管理系统获赛可达认证

近日,国际知名第三方网络安全检测服务机构——赛可达实验室(SKD Labs)发布最新测试报告,360终端安全管理系统以ATT&CK V12框架攻击技术覆盖面377个、覆盖度97.1%,勒索病毒、挖矿病毒检出率100%,误报率0…

详解web前端长度单位(px、em、rem、%、vw/vh、vmin/vmax、vm、calc())

1)简介 在前端开发中,会遇到各种不同类型的长度单位,比如px,em,rem等。 而整体的长度单位分为两大类: 绝对长度单位包括:in,cm, mm, q, pt, pc, px 相对长度单位包括:em, rem, %, vw, vh, vmax, vmin, vm,…

python基础语法 百度网盘,python基础语法个人笔记

大家好,本文将围绕python基础语法 百度网盘展开说明,python基础语法个人笔记是一个很多人都想弄明白的事情,想搞清楚python基础语法合集下载需要先了解以下几个事情。 前言 Python是一种多功能语言。它经常用作Web应用程序的脚本语言&#xf…

VSCode无法从Extensions下载工具时,把工具下载到本地并添加到VSCode编辑器

从VSCode 的 Extensions 下载 下载报错:Error while installing ...... extension. Please check the log for more details. 由于内网限制(或者其他网络限制)无法正常下载扩展工具到VSCode编辑器,可以把工具下载到本地再添加到V…

mysql知识点+面试总结

目录 1 mysql介绍 2 数据库常见语法 3 数据库表的常见语法 4 其他常见语法(日期,查询表字段) 5 JDBC开发步骤 6 索引 6.1 索引常见语法 7 常见面试总结 8 java代码搭建监控页面 1 mysql介绍 数据库:存储在硬盘上的文件系统…

如何做好科技文献资料的翻译!

我们知道,科技文献是工程技术人员的重要参考文献,翻译科技文献资料有助于促进国内外科技知识和技术的传播。那么,如何做好科技文献资料的翻译,专业科技文献翻译哪家好? 据了解,科技文献翻译是一种以应用为主…

chatglm2-6b模型在9n-triton中部署并集成至langchain实践 | 京东云技术团队

一.前言 近期, ChatGLM-6B 的第二代版本ChatGLM2-6B已经正式发布,引入了如下新特性: ①. 基座模型升级,性能更强大,在中文C-Eval榜单中,以51.7分位列第6; ②. 支持8K-32k的上下文&#xff1b…

【Leetcode】84.柱状图中最大的矩形(Hard)

一、题目 1、题目描述 给定 n n n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例1: 输入:heights = [2,1,5,6,2,3] 输出:10 解释:最大的矩形为图中红色区域,面积为 10示例2:…

【Spring系列篇--关于IOC的详解】

目录 面试经典题目: 1. 什么是spring?你对Spring的理解?简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 2.什么是IoC?你对IoC的理解?IoC的重要性?将实例化对象的权利从程序员…

安全学习DAY16_信息打点-CDN绕过

信息打点-CDN绕过 文章目录 信息打点-CDN绕过本节思维导图相关链接&工具站&项目工具前置知识:CDN配置:配置1:加速域名-需要启用加速的域名配置2:加速区域-需要启用加速的地区配置3:加速类型-需要启用加速的资源…

「Qt」文件读写操作

0、引言 我们知道 C 和 C 都提供了文件读写的类库,不过 Qt 也有一套自己的文件读写操作;本文主要介绍 Qt 中进行文件读写操作的类 —— QFile。 1、QFileDialog 文件对话框 一般的桌面应用程序,当我们想要打开一个文件时,通常会弹…

ArcGIS Pro基础入门、制图、空间分析、影像分析、三维建模、空间统计分析与建模、python融合、案例全流程科研能力提升

目录 第一章 入门篇 GIS理论及ArcGIS Pro基础 第二章 基础篇 ArcGIS数据管理与转换 第三章 数据编辑与查询、拓扑检查 第四章 制图篇 地图符号与版面设计 第五章 空间分析篇 ArcGIS矢量空间分析及应用 第六章 ArcGIS栅格空间分析及应用 第七章 影像篇 遥感影像处理 第八…

Azure如何启用网络观察应用程序

文章目录 基础概念介绍实操 基础概念介绍 Azure中的网络观察应用程序是一种用于监视和诊断Azure网络的工具。它提供了一种集中管理和监控网络流量、连接性和性能的方式。网络观察应用程序能够提供网络流量分析、连接监视、性能监视和故障诊断等功能,用于帮助管理员…

Layui列表表头去掉复选框改为选择

效果&#xff1a; 代码&#xff1a; // 表头复选框去掉改为选择 $(".layui-table th[data-field"0"] .layui-table-cell").html("<span>选择</span>");

【git】初次使用git上传代码到github远程仓库

目录 0.前言1.新建代码库2.添加SSH公钥2.1 前置准备2.2 Git 基本信息设置2.3 添加SSH Key 3.本地仓库上传到github3.1 建立本地仓库并初始化3.2 初始化仓库3.3 建立本地与github上新建项目链接3.4 同步github新建项目到本地3.5 添加本地文件到缓存区3.6 为上传文件添加注释3.7 …

PyQt5编写可视化程序GB/T 34986-2017 产品加速试验方法(B 5.5 湿度试验)

GB/T 34986-2017 产品加速试验方法&#xff08;B 5.5 湿度试验&#xff09; 阿伦纽斯模型-温度&#xff08;Arrhenius Mode) 温度公式 AF exp{(Ea/K)[(1/Tu)-(1-Tt)]} 举例 AF exp{[0.68/(8.61738510e-5)][[1/(27325)]-[1/(273105)]]} ≈271.9518 AF 为加速因子 RHs 施加应力…

CentOS系统环境搭建(十五)——CentOS安装Kibana

centos系统环境搭建专栏&#x1f517;点击跳转 关于Elasticsearch的安装请看CentOS系统环境搭建&#xff08;十二&#xff09;——CentOS7安装Elasticsearch。 CentOS安装Kibana 1.下载 &#x1f517;https://www.elastic.co/downloads/past-releases/kibana-7-17-12 若你是…

【Rust】Rust学习 第十四章进一步认识 Cargo 和 Crates.io

本章会讨论 Cargo 其他一些更为高级的功能&#xff0c;我们将展示如何&#xff1a; 使用发布配置来自定义构建将库发布到 crates.io使用工作空间来组织更大的项目从 crates.io 安装二进制文件使用自定义的命令来扩展 Cargo Cargo 的功能不止本章所介绍的&#xff0c;关于其全…

音视频学习-音视频基础

文章目录 一、 音视频录制原理二、音视频播放原理三、图像基础概念1.像素2.分辨率3.位深4.帧率5.码率6.Stride跨距 四、RGB、YUV1.RGB2.YUV1. 4:4:4格式2. 4:2:2格式3. 4:2:0格式4. 4:2:0数据格式对比 3.RGB和YUV的转换4.YUV Stride对齐问题 五、视频的主要概念1.基本概念2.I P…

python控制obs实现无缝切换场景!obs-websocket-py

前言 最近一直在研究孪生数字人wav2lip。目前成果可直接输入高清嘴型&#xff0c;2070显卡1分钟音频2.6分钟输出。在直播逻辑上可以做到1比1.3这样&#xff0c;所以现在开始研究直播。在逻辑上涉及到了无缝切换&#xff0c;看到csdn上有一篇文章还要vip解锁。。。那自己研究吧…