- 1、本文档共73页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章 IA-32指令系统 3.1 基本数据类型 3.2 IA-32的指令格式 3.3 IA-32指令的操作数寻址方式 3.4 IA-32的通用指令 3.1 基本数据类型 IA-32结构的基本数据类型是字节、字、双字、四字和双四字,如图3-1所示。 一个字节是8位,一个字是两个字节(16位),双字是4字节(32位),四字是8字节(64位),双四字是16字节(128位)。 3.1.1 字、双字、四字和双四字的对齐 字、双字和四字在内存中并不需要对齐至自然边界(字、双字和四字的自然边界是偶数编号的地址,对于双字和四字来说,地址要分别能被4和8整除)。 然而,为改进程序的性能,数据结构(特别是堆栈)只要可能应对齐在自然边界上。这样做的理由是:对于不对齐的存储访问,处理器要求做两次存储访问操作;而对于对齐的访问只要做一次存储访问操作。 3.1.2 数字数据类型 1.整数 IA-32结构定义两种类型整数:无符号整数和符号整数。无符号整数是原始二进制值,范围从0到所选择的操作数尺寸能编码的最大正数。符号整数是2的补码二进制值,能用于表示正的和负的整数值。 (1)无符号整数 无符号整数是包含字节、字、双字和四字中的无符号的二进制数。它们的值的范围,对于字节是从0到255;对于字,从0到65535;对于双字,从0到232–1;对于四字,从0到264–1。 (2)符号整数 符号整数是保存在字节、字、双字或四字中的带符号的二进制数。对于符号整数的所有操作都假定用2的补码表示。 整数值的范围,对于字节,从–128到+127;对于字从–32 768到+32 767;对于双字,从–231到+231–1;对于四字,从–263到+263–1。 2.浮点数据类型 IA-32结构定义和操作三种浮点数据类型:单精度浮点、双精度浮点和双扩展的精度浮点。 这些数据类型的数据格式与IEEE标准754二进制浮点算术所规定的格式直接相对应。 3.1.3 指针数据类型 指针是内存单元的地址(见图3-4)。IA-32结构定义两种类型的指针:近(Near)指针(32位)和远(Far)指针(48位)。Near指针是段内的32位偏移量(也称为有效地址)。Near指针在平面存储模式中用于所有存储器引用;或在分段存储模式中用于同一段内的存储器引用。Far指针是一个48位的逻辑地址,包含16位段选择子和32位的偏移。Far指针用于在分段存储模式中的跨段存储引用。 3.1.4 位字段数据类型 一位字段是连续的位序列。它能在内存中任何字节的任一位位置开始,并能包含多至32位。 3.1.5 串数据类型 串是位、字节、字或双字的连续序列。位串能从任一字节的任一位开始并能包含多至232–1位。字节串能包含字节、字或双字,其范围能从0至232–1字节(4G字节)。 3.2 IA-32的指令格式 指令有以下格式: label(标号):mnemonic(助记符)argument1(参数1),argument2(参数2),argument3(参数3) 其中: ? 标号(label)是一标识符后面跟有冒号(∶)。 ? 助记符(mnemonic)是一类具有相同功能的指令操作码的保留名。 ? 操作数参数1(argument1)、参数2(argument2)和参数3(argument3)是任选的。可以有零至三个操作数,取决于操作码。若存在,它们可能是文字或数据项的标识符、操作数标识符,或者是寄存器的保留名,或者是在程序的另一部分中声明的赋予数据项的标识符。 3.3 IA-32指令的操作数寻址方式 3.3.1 立即数 某些指令用包含在指令中的数据作为源操作数。这些操作数称为立即操作数(或简单称为立即数)。 3.3.2 寄存器操作数 源和目的操作数能在寄存器中。 3.3.3 存储器操作数 在内存中的源和目的操作数由段选择子和偏移量引用。 1.规定段选择子 段选择子能隐含或显式规定。规定段选择子的最简单的方法是把它加载至段寄存器,然后允许处理器根据正在执行的操作类型,隐含地选择寄存器。 2.规定偏移量 内存地址的偏移量部分或者直接作为一个静态值(称为位移量)规定或者由以下一个或多个成员通过计算得到地址: ? 位移量——一个8位、16位或32位值。 ? 基地址——在通用寄存器中的值。 ? 索引——在通用寄存器中的值。 ? 比例系数——值2、4或8,用于与索引值相乘。 由这些成员相加的结果称为有效地址。这些成员中,除比例系数外其它的每一个都能为正或负(2的补码)。图3-9显示了这些成员能组合成在所选择的段中的有效地址的所有可能的方法。 3.3.4 I/O端口寻
文档评论(0)