【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,1-8

文件下载与邀请翻译者

学习英特尔开发手册,最好手里这个手册文件。原版是PDF文件。点击下方链接了解下载方法。

讲解下载英特尔开发手册的文章

翻译英特尔开发手册,会是一件耗时费力的工作。如果有愿意和我一起来做这件事的,那么,欢迎你的加入。

另外,我不仅仅是打算翻译这一种手册,以后,可能还需要去翻译许多的英文技术文档,以支持系统底层的教学,培养系统底层程序员。

我有钱了以后,应该是会出私钱来请人翻译一批英文技术文档。当前,暂时没钱,若是有志愿加入的,欢迎啊。

本节翻译

【原文】1.5. NOTATIONAL CONVENTIONS
This manual uses special notation for data-structure formats, for symbolic representation of instructions, and for hexadecimal numbers. A review of this notation makes the manual easier to read.

【翻译】

1.5.  符号约定
本手册对数据结构格式、指令的符号表示和十六进制数使用特殊的表示法。回顾一下这个符号会使手册更容易阅读。

【讲解】上面的翻译中,对于notation这个单词,有的时候,我将其翻译为符号,有的时候,将其翻译为表示法。这一处,我自己也不知道怎么来处理更好。所以呢,就暂时地这么搁置着了。


【原文】1.5.1. Bit and Byte Order
In illustrations of data structures in memory, smaller addresses appear toward the bottom of the figure; addresses increase toward the top. Bit positions are numbered from right to left. The numerical value of a set bit is equal to two raised to the power of the bit position. IA-32 processors are “little endian” machines; this means the bytes of a word are numbered starting from the least significant byte. Figure 1-1 illustrates these conventions.

【翻译】
1.5.1.  位和字节顺序
在内存数据结构的图示中,较小的地址出现在图的底部;地址向顶部增加。位从右到左编号。一组位的数值等于2的位位置的幂次。IA-32处理器是“小端”机器;这意味着一个字的字节从最低有效字节开始编号。这些约定如图1-1所示。

【讲解】这一段呢,我略微作一下讲解。

这里谈到了不同尺寸的整数在内存中的放置的问题。假定有一个整数,0x1234,我们将其放置在内存单元0x1000起始的位置。为了放置0x1234这个word型的数,我们可以有两种方案。

第一种,将低字节放置在内存的低地址的位置。也就是,将0x34放在内存字节单元0x1000中,将0x12放置在内存字节单元0x1001中。像这种地,低位字节放置在内存的低地址的位置,高位字节放置在内存的高地址位置,这个就是小端字节序,也叫做小端顺序,小尾数。

英特尔手册上,说的是将一个2字节的整数放置在内存中。我们为了更好地理解这个小端字节序,我们也可以举出来一个4字节的整数的例子,也就是双字整数。

假定,我们要将0x12345678放置在内存地址0x3000的位置,那么,按照小端字节序,它放置的方式如下所示。

0x78   ---->    0x3000

0x56   ---->    0x3001

0x34   ---->    0x3002

0x12   ---->    0x3003

到了这里,我相信,小端字节序的问题,你应该就能明白了。

除了小端字节序以外,还有另外一种在内存中放置整数的顺序,叫做大端字节序,也叫做大端顺序,大尾数。在这种方式里面,将某一个尺寸的整数放置在内存里面,高位字节放置在内存的低地址位置,低位字节放置在内存的高地址位置。

如果是将0x1234放置在0x1000中,且采用大端顺序,则放置方式如下。

0x12   ---->    0x1000

0x34   ---->    0x1001

如果是用大端顺序,将0x12345678放置在内存0x3000中,则存储情况如下。

0x12   ---->    0x3000

0x34   ---->    0x3001

0x56   ---->    0x3002

0x78   ---->    0x3003

【原文】1.5.2.  Reserved Bits and Software Compatibility
In many register and memory layout descriptions, certain bits are marked as reserved.  When bits are marked as reserved, it is essential for compatibility with future processors that Software treat these bits as having a future, though unknown, effect.  The behavior of reserved bits should be regarded as not only undefined, but unpredictable.  Software should follow these Guidelines in dealing with reserved bits:
• Do not depend on the states of any reserved bits when testing the values of registers which contain such bits.  Mask out the reserved bits before testing.
• Do not depend on the states of any reserved bits when storing to memory or to a register.
• Do not depend on the ability to retain information written into any reserved bits.
• When loading a register, always load the reserved bits with the values indicated in the documentation, if any, or reload them with values previously read from the same register.

【翻译】1.5.2. 保留位和软件兼容性
在许多寄存器和内存布局描述中,某些位被标记为保留。当位被标记为保留时,为了与未来的处理器兼容,软件必须将这些位视为具有未来(尽管未知)的效果。保留位的行为不仅是未定义的,而且是不可预测的。软件在处理保留位时应遵循以下准则:
•当测试包含这些位的寄存器的值时,不要依赖于任何保留位的状态。在测试前屏蔽掉保留的位。
•当存储到内存或寄存器时,不依赖于任何保留位的状态。
•不要依赖于保留写入任何保留位的信息的能力。
•当加载寄存器时,总是用文档中指示的值加载保留位,如果有的话,或者用先前从同一寄存器读取的值重新加载它们。

【讲评】【Do not depend on the ability to retain information written into any reserved bits.】这一句话,它的翻译,我还有点不理解。不知道你是怎么来理解的。我觉得,它的意思大概是说,某些个保留位呢,假定原来的保留值是0,然后呢,你将1写入这个保留位,执行的结果是,这个保留位的值依然会是0,而不是你刚刚写入的1。大概,某些个保留位,在早期的型号的处理器里面,用什么值去写入,它都会是保留值。而新出的型号里面,可能就是说,你用什么值来写入,它里面就会是什么值。英特尔建议,你呢,不要依赖于某一型号与某一时期里面,保留位的值始终保持不变的能力。因为,早期里面这些个保留位可能具备保持保留值的能力,而将来的型号里面,可能就没有这种保持保留值的能力了。

不知道,你的理解是怎么样的。

【原文】NOTE
Avoid any software dependence upon the state of reserved bits in IA-32 registers. Depending upon the values of reserved register bits will make software dependent upon the unspecified manner in which the processor handles these bits. Programs that depend upon reserved values risk incompatibility with future processors.

【翻译】请注意
避免任何软件依赖于IA-32寄存器中保留位的状态。根据保留的寄存器位的值将使软件依赖于处理器处理这些位的未指定方式。依赖于保留值的程序有与未来处理器不兼容的风险。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Excel筛选数据时用到分类汇总值

举个例子;现有分类产品销售额汇总表如下所示: 请找出销售额大于所在分类平均销售额的产品: 使用 SPL XLL,输入公式: spl("E(?1).group(CategoryName).(a~.avg(ProductSales),~.select(ProductSales>a)).conj()",A…

R语言详解predict函数

R语言中predict函数在建立模型&#xff0c;研究关系时常用。但是不同type得到的结果常常被混为一谈&#xff0c;接下来&#xff0c;探讨predict得到的不同结果。 #数据 set.seed(123) n<-1000 age<-rnorm(n,mean50,sd10) gender<-rbinom(n,1,0.5) disease<-rbinom…

MFC工控项目实例二十四模拟量校正值输入

承接专栏《MFC工控项目实例二十三模拟量输入设置界面》 对模拟量输入的零点校正值及满量程对应的电压值进行输入。 1、在SenSet.h文件中添加代码 #include "BtnST.h" #include "ShadeButtonST.h"/ // SenSet dialogclass SenSet : public CDialog { // Co…

STM32——关于I2C的讲解与应用

1、什么是I2C&#xff1f; I2C(Inter&#xff0d;Integrated Circuit)是一种通用的总线协议。它是由Philips(飞利浦)公司&#xff0c;现NXP(恩智浦)半导体开发的一种简单的双向两线制总线协议标准。是一种半双工的同步通信协议。 2、I2C协议标准 I2C协议使用两根总线线路&am…

Ubuntu内存扩容

目录 vmware设置Ubuntu设置查看 读研后发现&#xff0c;Ubuntu的使用量直线上升&#xff0c;之前给配置了20g内存&#xff0c;安装了个ros后&#xff0c;没啥内存了。本文实现给Ubuntu扩容。 vmware设置 这里 我使用别人的截图来演示。 我在这里改成了60 Ubuntu设置 sudo a…

opencv dnn模块 示例(27) 目标检测 object_detection 之 yolov11

文章目录 1、YOLO v11 介绍1.1、改进点特性1.2、性能对比1.3、多任务支持 2、测试2.1、官方Python测试2.2、Opencv dnn测试2.3、测试统计 3、训练 1、YOLO v11 介绍 YOLO11是Ultralytics实时目标探测器系列中最新的迭代版本&#xff0c;重新定义尖端的精度、速度和效率。在以往…

数据结构实验十二 图的遍历及应用

数据结构实验十二 图的遍历及应用 一、【实验目的】 1、 理解图的存储结构与基本操作&#xff1b; 2、熟悉图的深度度优先遍历和广度优先遍历算法 3、掌握图的单源最短路径算法 二、【实验内容】 1.根据下图&#xff08;图见实验11&#xff09;邻接矩阵&#xff0c;编程实…

嵌入式开发:STM32 硬件 CRC 使用

测试平台&#xff1a;STM32G474系列 STM32硬件的CRC不占用MCU的资源&#xff0c;计算速度快。由于硬件CRC需要配置一些选项&#xff0c;配置不对就会导致计算结果错误&#xff0c;导致使用上没有软件计算CRC方便。但硬件CRC更快的速度在一些有时间资源要求的场合还是非…

ACM CCS 2024现场直击:引爆通信安全新纪元

今天是 ACM CCS 2024即ACM计算机与通信安全会议举办的第四天&#xff01;本届ACM CCS在美国盐湖城召开。从10月14日开始&#xff0c;会议日程紧凑&#xff0c;内容丰富&#xff0c;每一天都充满了精彩的议程和突破性的讨论&#xff0c;为参与者带来了一场知识与灵感的盛宴。 跟…

自动化测试与敏捷开发的重要性

敏捷开发与自动化测试是现代软件开发中两个至关重要的实践&#xff0c;它们相互补充&#xff0c;共同促进了软件质量和开发效率的提升。 敏捷开发的重要性 敏捷开发是一种以人为核心、迭代、循序渐进的软件开发方法。它强调以下几个核心价值观和原则&#xff1a; 个体和交互…

如何实现MCGS与S7-200SMART PLC以太网多台通信控制?

说到MCGS与S7-200SMART PLC以太网通讯&#xff0c;都是单个单台通讯&#xff0c;如果是多台PLC该如何进行通讯呢&#xff1f;下面就带大家来实现一台MCGS触摸屏如何和两台及以上S7-200SMART PLC进行以太网通讯控制。 一、设备选型 &#xff08;1&#xff09;TPC1570GI触摸屏一…

【数据结构与算法】LeetCode每日一题

题目&#xff1a; 解答&#xff1a; 思路第一&#xff0c;什么语言不重要 1.首先&#xff0c;如果是两个正序的&#xff0c;那么我们可以直接两个链表各个位数相加&#xff0c;但是有一个问题&#xff0c;如果有个数是两位数&#xff0c;另一个位是三位数&#xff0c;那个两位…

shell脚本宝藏仓库(基础命令、正则表达式、shell基础、变量、逻辑判断、函数、数组)

一、shell概述 1.1 shell是什么 Shell是一种脚本语言 脚本&#xff1a;本质是一个文件&#xff0c;文件里面存放的是特定格式的指令&#xff0c;系统可以使用脚本解析器、翻译或解析指令并执行&#xff08;shell不需要编译&#xff09; Shell既是应用程序又是一种脚本语言&…

ES6扩展运算符

1.介绍&#xff1a; ... 扩展运算符能将数组转换为逗号分隔的参数序列&#xff1b; 扩展运算符&#xff08;spread&#xff09;也是三个点&#xff08;...&#xff09;。它好比 rest 参数的逆运算&#xff0c;将一个数组转为用逗号分隔的 参数序列&#xff0c;对数组进…

Morris算法(大数据作业)

我只能说&#xff0c;概率证明真的好难啊&#xff01;(&#xff1b;′⌒) 这也证明我的概率论真的学的很差劲&#xff0c;有时间一定要补补/(ㄒoㄒ)/~~ 算法不难证明难&#xff01; 当一个数足够大时&#xff0c;能不能用更少的空间来近似表示这个整数n&#xff0c;于是&…

用Java爬虫API,轻松获取电商商品SKU信息

在电子商务的精细化运营时代&#xff0c;SKU信息的重要性不言而喻。SKU&#xff08;Stock Keeping Unit&#xff09;信息不仅包含了商品的规格、价格、库存等关键数据&#xff0c;还直接影响到库存管理、价格策略和市场分析等多个方面。如何高效、准确地获取这些信息&#xff0…

卸载Python

1、查看安装框架位置并删除 Sudo rm -rf /Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8 2、查看应用并删除 在 /Applications/Python 3.x 看是否存在&#xff0c;如果存在并删除。 3、删除软连接 ls -l /usr/bin/py* 或 ls -…

闯关leetcode——110. Balanced Binary Tree

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/balanced-binary-tree/description/ 内容 Given a binary tree, determine if it is height-balanced. A height-balanced binary tree is a binary tree in which the depth of the two subtrees…

系统内核分析工具

工具下载地址&#xff1a;系统内核分析工具-32位64位资源-CSDN文库

PyQt5高级界面控件一

如何查看widget类及其子类有哪些属性和函数&#xff1a; dir() from PyQt5.QtWidgets import QWidget dir(QWidget)help() from PyQt5.QtWidgets import QWidget help(QWidget)表格与树 表格与树解决的问题是如何在一个控件种有规律地呈现更多的数据。PyQt提供了两种控件类用…