《计算机组成与设计:硬件软件接口》第二章 ~2.16~2.20 学习笔记

2.16实例:IA-32指令

指令集的设计者有时提供了比能在MIPS中找到的功能更强的操作。它的目标是能从总体上减少一个程序执行的指令数目。而其风险在于:由于破坏了硬件的简洁性,导致程序执行的时间的增加,因为指令执行可能缓慢。缓慢的原因可能是因为时钟周期更长,或者比简单的代码序列需要更多的时钟周期。

通向操作复杂性的道路是如此遍布荆棘。为了避免这些问题,设计者已经倾向于设计更加简单的指令

2.16.1 Intel IA-32

MIPS是一个小组在1985年推出的版本。这个体系结构的每一个部分都互相配合得很好,整个体系结构能被很容易地描述出来。然而IA-32却不是这样的;它是一个来源于数个互相独立的组织,发展演化该体系结构几乎超过20年的产品,不断增加新的特点功能,在原有的指令上,就好像一个人不停地往一个已经专门的包里塞衣服。

本节,我们最要关心的是源于80386的32位指令子集,因为它是常常被用到的,而不是整个16位和32位指令集。我们从寄存器和寻址模式开始说明,接下来是整数操作,最后考虑指令编码。

IA-32寄存器和数据寻址模式

通过80386的寄存器可以看到指令集的进化。80386把所有的16位寄存器(除了段寄存器)扩展为32位。前缀为E的表示这是一个32位寄存器。我们通常把它们称为通用寄存器。80386只有8个寄存器。这意味着MIPS程序使用四倍数量的寄存器。

算术、逻辑和数据传送指令都是两个操作数的指令。这里主要有两点重要的不同之处。IA-32算术和逻辑指令必须有一个操作数既是源又是目的;MIPS允许不同的寄存器分别作为源和目的。这一个限制对有限的寄存器带来了更大的压力,因为一个源寄存器必然被修改。第二个重要的不同之处就是,一个操作数可能位于存储器中。事实上,任何一个指令都可以有一个操作数位于存储器中,这与MIPS和PowerPC不一样。

下面要说明的七种数据存储器寻址模式,但是一种模式中可以使用的寄存器是有限制的。图2-42给出了IA-32的寻址模式和各模式下可以使用的通用寄存器,并说明了如何用MIPS指令得到同样的结果。

2.16.2   IA-32整数操作

8086对8位(字节)和16位(字)数据类型都提供支持。80386系统结构提供一个方便的途径来指定每一种形式而无需显著地增加代码长度。它们认定大多数程序中16位或32位数据占绝大多数,于是能够设定一个默认的大的长度是有意义的。这个默认的数据长荡湖有代码段寄存器中的一位指定。要忽略默认数据长度,加在指令前的8位前缀告诉机器这条指令使用其他数据长度。

前缀解决方案是从8086借鉴过来的,8086可使用多种前缀来改变指令的功能。最初的三个前缀包括默认的段寄存器,锁定总线以支持信号量,或重复后面的指令直到寄存器ECX减少到0.最后一个前缀要配合一个直接传送指令使用以便传送可变数目的字节。8086还加入一个前缀以忽略默认的地址长度。

IA-32整数操作可以归为四大类:

(1)数据传送指令、包括move,push和pop

(2)算术和逻辑运算指令,包括判断、整数和小数算术运算

(3)控制流,包括条件分支、无条件跳转、调用和返回

(4)字符串指令,包括字符串传送和字符串比较。

IA-32的条件分支基于条件码或标志位。条件码是作为某种操作的附加结果被设置的;大多数用于将结果值与0比较。然后分支指令判断条件码。采用条件码的理由是它们作为常规操作的一部分出现并且判断起来比MIPS的beq和bne指令比较寄存器的内容要快。不用条件码的理由是与0比较延长了操作时间,因为它在操作之后使用了额外的硬件,而且程序员经常必须用比较指令来判断非操作结果值。此外,PC相关的分支必须以字节的个数指定,因为与MIPS,80386不都是4字节长。

2.17谬误和陷阱

谬误: 功能更强大的指令意味着更高的性能

80x86的一部分强大功能是具有能够改变后续指令执行的指令前缀。一个前缀可以重复后面的指令直到计数器减少到0.因而,为了传送存储器中的数据,指令序列似乎应该是使用加了重复前缀的move来执行32位存储器到存储器的传送。

另一种方法,使用所有计算器上都有的标准指令,将数据调入寄存器然后再将寄存器存辉存储器。这第二种形式,如果以复制代码来减少循环开销,大约快1.5倍。第三种方式,使用更大的浮点寄存器代替IA-32的整数寄存器,复制比使用复杂指令快2倍。

谬误: 使用汇编语言编程来获得最高的性能

编译器和汇编程序员之间的斗争正从人类奋斗领域消失。

陷阱:忘记在字节寻址的机器中,连续的字地址并不相差1。

陷阱:在自动变量的定义过程体外使用指向该变量的指针

2.18结论

  少就是多。                                  ---Robert Browning

存储程序计算机的两个原则是程序使用和数字没有区别的指令和使用可改变内容的存储器。这些原则使得单个机器可以帮助环境科学家、经济顾问和小说家完成他们的专业工作。选择一个机器能够理解的指令集时,必须全面平衡程序所需要的指令数目。指令需要的时钟周期数和时钟速度。有四条设计原则指导指令集设计者如何权衡:

 

 

 2.19 略

2.20 略

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值