CSAPP读书笔记——程序的机器级表示之寄存器分布与mov指令集

本文主要是介绍CSAPP读书笔记——程序的机器级表示之寄存器分布与mov指令集,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

IA32整数寄存器的划分


IA32(Inter Architecture 32-bit)处理器中有 8 32位的寄存器(register)用来存储整型和指针(浮点数由单独的寄存器处理)。

这里写图片描述

这就是 8 integer register的简单图示。

其中每个 32 位的寄存器都由 %e 开头,每个寄存器的低 16 位都可以作为单独的存储空间来存储 16 位的数据(例如 short ),前四个寄存器的后低 16 又可以分为两个 8 位的寄存器,存储一个字节(byte,处理char类型)。

注意,最后两个寄存器有其特殊含义。
%esp表示存储系统栈的指针,只能被特殊的指令管理。
%ebp 表示帧指针(Frame pointer),也与系统栈的调用有关不能被随意访问。

前六个寄存器被称为通用寄存器,一般来讲在它们的使用上没有太多限制。

我们将处理 8 个位称为一个字节(byte),16个位称为一个字(word), 32 位称为双字节(double word)。
只是延续传统的命名而已,因为刚开始的时候IA是16位架构的,将其扩展为 3 2位之后用16位称一个word, 32 位称double word。


操作数指示符


编译器将程序解释为机器相关的汇编代码,从汇编代码我们可以看出程序对操作系统的各种资源的管理调度。
大多数汇编指令都有一个或者更多的操作算子(operands),用来指示该指令引用的源数据和它的目标位置。

源数据可以是一个常数或者是从寄存器、内存中取得的数。
目标位置可以是寄存器或者内存(通常用一个 32 位的地址来描述)

算子一般分为三类,我们依次介绍。

  1. immediate : 立即数。立即数就是一个常量,在ATT-format的汇编代码中,用前导符号 $ 表示,例如 $577 `或者 $0x1F 。只要可以被 32 bit表示即可。(汇编语言有时候可能会有 8 位(char)或16位(short)编码)。

  2. register : 寄存器。寄存器被作为汇编代码中的操作算子的时候,实际上指示的是该存储器中存储的值。 32 位寄存器(例如 %eax )存储 int 或者 pointer 16 位寄存器(例如 %ax )存储 short 8 位寄存器(例如%al)存储 char 。我们用符号 Ea 表示寄存器 a ,用R[Ea]表示 a 存储的内容。即将一组寄存器看数组R的下标。

  3. memory : 存储器。我们通过有效地址来访问存储器(内存),用符号 Mbyte[Addr] 表示从 Addr 开始的 byte 个字节长度的引用。常见的表达式为 Imm(Eb,Ei,s) ,其中

这篇关于CSAPP读书笔记——程序的机器级表示之寄存器分布与mov指令集的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/564415

相关文章

SpringBoot实现微信小程序支付功能

《SpringBoot实现微信小程序支付功能》小程序支付功能已成为众多应用的核心需求之一,本文主要介绍了SpringBoot实现微信小程序支付功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录一、引言二、准备工作(一)微信支付商户平台配置(二)Spring Boot项目搭建(三)配置文件

如何用java对接微信小程序下单后的发货接口

《如何用java对接微信小程序下单后的发货接口》:本文主要介绍在微信小程序后台实现发货通知的步骤,包括获取Access_token、使用RestTemplate调用发货接口、处理AccessTok... 目录配置参数 调用代码获取Access_token调用发货的接口类注意点总结配置参数 首先需要获取Ac

基于Python开发PDF转Doc格式小程序

《基于Python开发PDF转Doc格式小程序》这篇文章主要为大家详细介绍了如何基于Python开发PDF转Doc格式小程序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用python实现PDF转Doc格式小程序以下是一个使用Python实现PDF转DOC格式的GUI程序,采用T

将java程序打包成可执行文件的实现方式

《将java程序打包成可执行文件的实现方式》本文介绍了将Java程序打包成可执行文件的三种方法:手动打包(将编译后的代码及JRE运行环境一起打包),使用第三方打包工具(如Launch4j)和JDK自带... 目录1.问题提出2.如何将Java程序打包成可执行文件2.1将编译后的代码及jre运行环境一起打包2

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个

EMLOG程序单页友链和标签增加美化

单页友联效果图: 标签页面效果图: 源码介绍 EMLOG单页友情链接和TAG标签,友链单页文件代码main{width: 58%;是设置宽度 自己把设置成与您的网站宽度一样,如果自适应就填写100%,TAG文件不用修改 安装方法:把Links.php和tag.php上传到网站根目录即可,访问 域名/Links.php、域名/tag.php 所有模板适用,代码就不粘贴出来,已经打