符号约定
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
符号约定
这份指南使用特别的符号来表示数据结构的格式,指令的符号表示和16进制、2进制数。具体见下。
1位和字节顺序
内存的数据结构如图所示,较低的地址出现在图片的底端;地址向上增长。位地址从右向左标记。IA-32
处理器是”little endian”处理器;这意味着一个字将从最低字节开始存储。图1:
2保留位和软件兼容性
在大多数的寄存器和内存分配参考书中,有的位被保留。当位被保留的时候,************************
软件应该遵从下面处理保留位的建议:
l当测试包含保留位的寄存器的值时,不要依赖于这些保留位。测试之前把这些保留位标记出来。
l向内存和寄存器中存数据时,不要依赖于那些保留位
l不要将任何保留信息写入保留位
l当加载一个寄存器的时候,一定只能将文档中规定的值存到保留位。如果可以,还能加载相同寄存器的值。
NOTE
避免任何软件依赖于保留位的值。如果依赖那些位的
值,将会导致处理器做出一些未知的事,还会使软件
于未来的cpu不兼容。
3指令操作数
指令用符号表示,这只是IA-32汇编语言的一部分。一个指令有下面的格式:
标签:助记符参数1,参数2,参数3
l标签是一个以冒号结尾的识别符
l助记符是指令操作码的助记符
l操作数:参数1,参数2,参数3是可选得。可能有0~3个操作数,这取决于操作码。操作数可能是数据本身,也可能是代表数据的符号。****************
4十六进制和二进制数
0F82EH、110B
5段地址
处理器使用字节地址,意思是内存被视为一系列字节来组织和访问。无论有多少字节正在被仿问,都是用一个字节地址去寻找。可以被寻址的内存范围叫地址空间(address space)。
处理器也支持段地址,这是一个程序可支配的地址空间的一部分,叫做段(segments)。例如,一个程序可以让它的代码和堆栈驻留在分开的段。代码地址将总是指向代码空间,堆栈地址总是指向堆栈空间。下面的标记指出了一个在段中的字节地址:
Segment-reg:Byte-address
例如:DS:FF79H CS:EIP
6关于CPUID、CR、MSR值的新语法
想获取功能标志、状态和系统信息,可以使用CPUID指令,检查控制寄存器,读取model-specific寄存器。我们采用了一种新的排列方式来描述这个信息。见下图:
7异常
一个异常是一条指令发生错误时导致的特别的事件。例如,除零的时候会产生一个异常。当然,其他的异常会发生在其他的情况下。有些异常可能会提供错误代码。错误代码提示了关于那个错误的附加信息。一个被用作显示异常和错误代码的符号的例子如下:
#PF(fault code)