您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 计算机组成原理-第五章-指令体系结构
第五章指令系统层指令系统层是硬件和软件之间的接口。指令系统层定义了硬件和编译器之间的接口,它是一种硬件和编译器都能理解的语言。5.1指令系统层概述5.1.1指令系统层的性质指令系统层定义计算机的存储模式、寄存器组织、合法的数据类型和指令等信息。ISA层的另一个重要特性是大多数机器具有2个模式:内核模式和用户模式。5.1.2存储模式1.内存组织所有计算机都把内存分成具有连续地址的单元目前单元长度多为8位(一个字节)字节通常按照4个一组(32位)或8个一组(64位)组成字,这样指令就可以按照字对内存进行管理。许多体系结构要求字按照它们的自然边界对齐。大多数计算机的指令系统层具有单一的线性地址空间2.内存语义所有内存请求都被串行执行(一个操作完成以后再执行下一个操作)内存不保证操作次序介于两者之间的模式,硬件自动阻塞特定的内存操作(如RAW和WAR)。5.1.3寄存器ISA层的寄存器可以粗略地分成2类:专用寄存器和通用寄存器。*专用寄存器包括:PC,SP和其他一些有专门用途的寄存器。*通用寄存器用于保存重要的局部变量和中间计算结果,它们的主要用途是提供快速的手段来访问哪些使用频繁的数据(避免访存)*标志寄存器(PSW):是一个可以同时在内核状态和用户状态下使用的寄存器.该寄存器保存CPU需要的各种不同的状态位,其中最重要的是条件码。*N—当结果是负数时设置*Z—当结果为零时设置*V—当结果产生溢出时设置*C—当结果产生了最高位进位时设置*A—当结果在第3位产生进位(辅助进位)时设置*P—当结果具有偶校验时设置5.1.4指令ISA层主要的特征是机器指令集,正是这些指令在控制计算机的运行。5.1.5Pentium4指令系统层概述Pentium4有3种操作模式:实模式:所有8088之后增加的新特性都被关闭,这时Pentium4就像一台简单的8088。如果任何一个程序出错,整台计算机就会崩溃。虚拟8086模式:用一种受保护的方式来运行老的8088程序。这时,有一个实际OS在控制整个计算机。为了运行老的8088程序,OS会创建一个特殊的独立的8088环境。与实际的8088不同的是当程序崩溃时,计算机不会崩溃,而只是通知OS。保护模式:Pentium4才真的是一台Pentium4。在保护模式下,有4种可用的特权级别,它们由PSW的对应位控制。第0级相当于其他计算机的内核模式,它可以完全控制计算机,因而只由OS使用。第3级用于运行用户程序,它阻塞用户程序对某些特殊的关键指令和控制寄存器的访问,以防止某些恶意的用户程序搞垮整个计算机。级别1和2很少使用。Pentium4具有很大的地址空间,它的内存分为16384个段,每个段都从地址0---232-1。按字节编址,地址长度32位。字节顺序-----小端形式。ThePentium4中主要寄存器5.1.6UltraSPARCⅢ指令系统层概述UltraSPARCⅢ的内存结构简单而清晰,其可寻址的地址空间是一个264字节的线性数组。默认的字节顺序---大端形式,通过PSW中设置一位可以转换成小端形式。UltraSPARCⅢ有2组寄存器:32个64位的通用寄存器和32个浮点寄存器。UltraSPARCIII的通用寄存器对程序员来说,任何时刻都只能看到32个R,但UltraSPARCⅢ确实有不止32个通用R,这种著名的寄存器窗口特性是为了有效地支持过程调用而设计的(图5-5)。它的基本思想是用寄存器模拟栈,也就是说,就像一个栈有多个段一样,在UltraSPARCⅢ中确实存在多个寄存器组。在任意时刻都只能精确地看到32个寄存器。当前窗口指针CWP(currentWindowPointer)记录当前使用的寄存器组。UltraSPARCIII寄存器窗口操作UltraSPARCⅢ体系结构是一个加载/存储体系结构。也就是说,能够直接访问存储器的唯一操作只有加载(LOAD)和存储(STORE),这类指令用于在寄存器和内存之间传递数据。所有的算术和逻辑运算指令的操作数都应该来自寄存器或者由指令本身提供,所有结果都必须保存在寄存器中。5.1.78051指令系统层概述(a)8051芯片内部存储器组织(b)8051的主要寄存器8051的内存模式非常简单,具有一个64KB的程序地址空间和一个64KB的数据地址空间。8051采用一种与众不同的方式来处理寄存器。寄存器有4组,但在任何时刻只有一组是可见的。PSW中有一个2位的字段,决定哪个寄存器组当前正在使用。采用多寄存器组实际是为了实现快速的中断处理。8051寄存器的另一特殊的性质是它们出现在内存空间中。位操作5.2数据类型讨论数据在计算机内部的表示形式,即计算机硬件能够直接识别可以被指令系统直接调用的数据,包括数值数据和非数值数据两大类。5.2.1数值数据(大小、符号和小数点)一、进位计数制及相互转换二、数的符号表示1.真值和机器数真值:带正、负号的数的实际值,如+3,-5等。机器数:数在计算机中的二进制表示形式。为了适合计算机存储与处理,机器数通常采用将真值按某种方式进行编码的形式。2.无符号数(整数)机器数的所有二进位都用来表示数值,每一位的权值不同。例10111001=1×27+1×25+1×24+1×23+1×20=185表示范围:n+1位无符号整数的表示范围为0-2n+1-1。(8位数,0—255)102niiiaA3.有符号数0-正,1-负,放在二进制数的最高位(符号位),符号位和数值位一起编码:原码、反码、补码、移码(浮点数的阶码)由真值求原码、补码、反码正数:原、反、补相同,都与真值相同。负数:原码,负号用1表示,数值部分不变(注意小数的符号位在小数点的左边)反码,原码除符号外求反补码,原码除符号外求反加1(简便方法)例x=0.1011x=-0.1011x=+1011x=-1011符号扩展8位二进制整数表示-1的补码[-1]补=假定十进制数-66,按补码形式存放在一个8位寄存器中,该寄存器的内容用十六进制表示为:13(12)、假定编译器规定int和short类型长度分别为32位和16位,执行下列C语言程序Unsignedshortx=65530Unsignedinty=x得到y的机器数为A00007FFAHB0000FFFAHCFFFF7FFFAHDFFFFFFFAH移码:现在计算机中浮点数的阶码常采用移码表示。阶码之所以采用移码表示是因为移码有两个重要性质:一是移码值增大,对应的数值也大,这样便于浮点运算时的阶码比较;二是当阶码用移码表示时,浮点数的机器零和逻辑零表示相同。例:20×0.1101+22×0.0110如果对每个阶码都加上一个足够大的正常数,使所有的阶码都转化为正整数,就可消除阶码符号的影响。移码定义:[X]移=2n+X,-2n≤X≤2n-10128255[x]移-1280127x数轴上的移码表示#机器零真值x[x]补[x]移十进制二进制二进制十进制-128-127┇-101┇127-10000000-01111111┇-000000010000000000000001┇011111111,00000001,0000001┇1,11111110,00000000,0000001┇0,11111110000000000000001┇011111111000000010000001┇1111111101┇127128129┇255移码与真值、补码的对应关系★由原码、补码、反码、移码求真值正数负数:原码的符号位1改用负号“-”表示,数值部分不变。反码,除符号位外求反得到原码,再由原码得出真值。补码除符号位外求反加1得到原码,然后由原码得出真值。★移码:移码和补码除符号位相反外,其余各位相同。移码补码真值二进制数表示无符号数原码补码反码移码0000000000000001︰011111111000000010000001︰111111101111111101︰127128129︰254255+0+1︰+127-0-1︰-126-127+0+1︰+127-128-127︰-2-1+0+1︰+127-127-126︰-1-0-128-127︰-10+1︰+126+1270的表示:原码和反码有2种,补码和移码只有一种。12(09),一个C语言程序在一台32位机器上运行。程序中定义了三个变量x,y和z,其中x和z为int型,y为short型。当x=127,y=-9时,执行赋值语句z=x+y后,x,y和z的值分别是A.x=0000007FH,y=FFF9H,z=00000076HB.x=0000007FH,y=FFF9H,z=FFFF0076HC.x=0000007FH,y=FFF7H,z=FFFF0076HD.x=0000007FH,y=FFF7H,z=00000076H[x]补0000007FH[Y]补FFF7H0000007FH+FFFFFFF7H=00000076H13(10).假定有4个整数用8位补码分别表示r1=FEH,r2=F2H,r3=90H,r4=F8H,若将运算结果存放在一个8位寄存器中,则下列运算会发生溢出的是()A.r1xr2B.r2xr3C.r1xr4D.r2xr4三、数的小数点表示定点数(整数)浮点数定点数的表示范围(假设计算机字长为n+1位)原码(反码):小数整数补码(移码):小数整数浮点数浮点表示法就是一个数的小数点的位置不固定,可以浮动。对于任一数N可表示成:nX210nnX21)21(120nX12)12(nnXnX211122nnXmRMRNeE其中,(Exponent)是指数,被称为浮点数的阶码,(Mantissa)称为浮点数的尾数或有效数,尾数的符号表示数的正负。(Radix)是阶码的底,又称为尾数的基值。基值在计算机中可以为2、8、或者16,是个常数,在系统中是事先隐含约定的,不需用代码表示。∴浮点数用一对定点数(阶码(整数、补或移码)和尾数(小数(原或补码))表示,基值(数)隐含。例:20×0.0110100=21×0.0011010=2-1×0.1101000★规格化浮点数(唯一、提高计算精度)尾数:正数,0.1××...×负数(原码)1.1××...×负数(补码)1.0××...×规格化操作:当运算结果尾数不满足规格化条件时,需将尾数左移以实现规格化,尾数每左移一位(小数点位置不动)阶码减1,直至尾数满足规格化条件为止。典型数据机器数形式(从左到右依次为数符、阶符、l位阶码、n位尾数)真值最大正数最小正数(非规格化)最小正数(规格化)最大负数(非规格化)最大负数(规格化)最小负数0011…111…110111…100…010111…110…001111…100…011111…110…001011…111…11212(12)ln(21)22ln(21)122l(21)22ln(21)122l212(12)ln阶码和尾数均采用原码表示★表示范围:例:已知16位的浮点数格式如下:数符1位,阶码4位(移码表示),尾数11位(原码表示),基值为2,计算此规格化浮点数的下列真值:最大正数最小正数最大负数最小负数浮点数阶码的位数决定数的表示范围,尾数的位数决定数的精度。)21(211718221822)21(2117IEEE754标准:阶码用移码,尾数用原码,基值为2(单精度格式)⊙阶码值的范围为1~254,它的偏移值为127,最大阶码真值为127,最小阶码真值为-126⊙原码表示的非0规格化浮点数的尾数的最高有效位一定为1,IEEE754标准中利用这一点,规定规格化浮点数在小数点的左边有一隐含位(作为二进制整数的个位)。由于该位为1,不需要存储,在运算时,自动加上该位参加运算。因此,使单精度浮点数的尾数的有效位为24位。此时规格化浮点数的尾数为1.f(f为尾数,1为隐含位)。所以,规格化非零数的阶码真值e为[-126,127],则阶码值E为[1,
本文标题:计算机组成原理-第五章-指令体系结构
链接地址:https://www.777doc.com/doc-5687377 .html