第9章 指令集结构_第1页
第9章 指令集结构_第2页
第9章 指令集结构_第3页
第9章 指令集结构_第4页
第9章 指令集结构_第5页
已阅读5页,还剩100页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第九章第九章 指令集结构指令集结构课程课程目标目标第第6868章章计算机内的信息表示方式及其运算(第计算机内的信息表示方式及其运算(第6 6章)章)计算机内实现信息处理和存储的判定元件和存储元件计算机内实现信息处理和存储的判定元件和存储元件(第(第7 7章)章)基于冯基于冯诺依曼模型,将元件构建为可以执行由一组诺依曼模型,将元件构建为可以执行由一组指令组成的程序的计算机(第指令组成的程序的计算机(第8 8章)章)当一个高级语言程序,如当一个高级语言程序,如C C程序执行时,在计算程序执行时,在计算机内部究竟发生了什么机内部究竟发生了什么?首先,一个用高级语言编写的程序必须被翻译成该程首先,一个

2、用高级语言编写的程序必须被翻译成该程序期望执行的那台序期望执行的那台特定计算机特定计算机的一组指令的一组指令然后,在控制单元的指挥下被逐步处理然后,在控制单元的指挥下被逐步处理第第914914章章特定的目标机器特定的目标机器DLXDLX指令集结构(指令集结构(ISAISA)第第9 9章章指令集结构是软件指令和执行命令的硬件之间的指令集结构是软件指令和执行命令的硬件之间的接口接口I/OI/O设备管理设备管理高级语言程序翻译高级语言程序翻译指令集结构指令集结构指明了在一台机器上编写软件时所要注意的全指明了在一台机器上编写软件时所要注意的全部信息部信息规定了程序员规定了程序员使用机器语言编程使用机器

3、语言编程时的全部信息时的全部信息将将高级语言,如高级语言,如C C、PascalPascal或或FortranFortran、COBOLCOBOL写写的程序翻译成机器语言,的程序翻译成机器语言,ISAISA也提供了关于该计也提供了关于该计算机的所有可用信息算机的所有可用信息ISAISA规定了存储器的组织,寄存器集和指令集,规定了存储器的组织,寄存器集和指令集,包括操作码,数据类型和寻址模式包括操作码,数据类型和寻址模式存储器组织存储器组织DLXDLX2 23232(即(即4G4G)个单元)个单元8 8位位数据的存储和排列顺序数据的存储和排列顺序字长字长:3232位,位,4 4个字节个字节左边的

4、字节被称为高字节左边的字节被称为高字节右边的字节被称为低字节右边的字节被称为低字节数据的存储和排列顺序数据的存储和排列顺序大端,大端,Big Endian,Big Endian,高位优先高位优先小端,小端,Little EndianLittle Endian高位优先高位优先DLXDLX将字的高位字节存放在内存的低地址端,将字的高位字节存放在内存的低地址端,低位字节存放在高地址端低位字节存放在高地址端在地址在地址x4000 0000 x4000 0003x4000 0000 x4000 0003的的4 4个存储单元之中,存放个存储单元之中,存放了一个字了一个字当访问这个字时,只需使用其当访问这个

5、字时,只需使用其起始地址起始地址x4000 0000 x4000 0000即可即可这个字是这个字是x1234 5678x1234 5678x0000 0000 x0000 0001x4000 0000 x4000 00010011 01000111 1000 x4000 0002x4000 0003xFFFF FFFF0001 00100101 0110边界对齐边界对齐字字的起始地址必须是的起始地址必须是4 4的倍数,即边界对齐的倍数,即边界对齐从存储器中获得一个从存储器中获得一个8 8位的字节时,如位的字节时,如ASCIIASCII码,码,只需访问只需访问1 1个存储单元个存储单元寄存器寄存

6、器DLXDLX在一个机器周期内访问的附加的临时存储空间在一个机器周期内访问的附加的临时存储空间通用寄存器集通用寄存器集(GPRGPR)存储在每一个寄存器中的位数通常是一个字存储在每一个寄存器中的位数通常是一个字,3232位位被唯一识别被唯一识别3232个通用寄存器,使用个通用寄存器,使用5 5位编码来识别,分别被位编码来识别,分别被标记为标记为R0R0、R1R31R1R31注意,注意,R0R0寄存器寄存器中的数据必须为零中的数据必须为零寄存器堆寄存器堆R000000000000000000000000000000000R100000000000000000000000000000011R200

7、000000000000000000000000000011R300000000000000000000000000000111R411111111111111111111111111111110R2911111111111111111111111111111100R3011111111111111111111111111111010R3111111111111111111111111111111000R000000000000000000000000000000000R100000000000000000000000000000011R2000000000000000000000000000

8、00101R300000000000000000000000000000111R411111111111111111111111111111110R2911111111111111111111111111111100R3011111111111111111111111111111010R311111111111111111111111111111100031 2625 21 20 16 15 11 10 6 5 00 0 0 0 0 00 0 0 0 0 0 0 0 0 1 0 0 0 1 00 0 0 0 00 0 0 0 0 1R-类型类型R0R1R2未用未用ADD浮点寄存器浮点寄存器32

9、32个浮点寄存器,用于单精度或双精度计算个浮点寄存器,用于单精度或双精度计算使用使用5 5位编码来识别,分别被标记为位编码来识别,分别被标记为F0F0、F1F31F1F31每个寄存器也是每个寄存器也是3232位位单精度数只需一个浮点寄存器单精度数只需一个浮点寄存器双精度数则需要两个浮点寄存器双精度数则需要两个浮点寄存器指令集指令集指令指令:操作码(指令让计算机做的事情)和操操作码(指令让计算机做的事情)和操作数(计算机操作的对象)作数(计算机操作的对象)指令集是由一组操作码、数据类型和寻址模式指令集是由一组操作码、数据类型和寻址模式定义的定义的寻址模式寻址模式决定了如何计算将要读取决定了如何计

10、算将要读取/ /存储的存储存储的存储单元的地址单元的地址CISCCISC和和RISCRISCCISCCISC(Complex Instruction Set ComputerComplex Instruction Set Computer,复杂指令集计算机)复杂指令集计算机)具有复杂化的倾向,提供了功能强大的复杂指令,开具有复杂化的倾向,提供了功能强大的复杂指令,开发程序比较容易,但是由于指令复杂,指令执行效率发程序比较容易,但是由于指令复杂,指令执行效率较低较低IntelIntel的的x86x86指令集指令集RISCRISC(Reduced Instruction Set ComputerR

11、educed Instruction Set Computer,精简指令集计算机)精简指令集计算机)RISCRISC的指令集较小,指令执行效率比的指令集较小,指令执行效率比CISCCISC高,但是,高,但是,在开发程序方面则有所欠缺在开发程序方面则有所欠缺MIPSMIPS、SUNSUN的的SPARCSPARC、IBMIBM的的PowerPCPowerPC指令格式指令格式I-I-类型类型R-R-类型类型J-J-类型类型ADDADD指令指令:R-R-类型,函数为类型,函数为ADDADD,二进制补码整,二进制补码整数数31 26 25 2120 1615 0操作码操作码SR1DRImm1631 26

12、 25 21 20 16 15 1110 65 0操作码操作码SR1SR2DR未用未用函数函数31 26 25 0操作码操作码PCOffset26操作码操作码由指令的由指令的31:2631:26位定义,有位定义,有6464种可能种可能R R类型类型指令的指令的31:2631:26位为位为0000000000005:05:0位定义了函数,有位定义了函数,有6464种可能的函数种可能的函数只定义了只定义了9191条指令条指令四种类型四种类型按照功能分为四种类型按照功能分为四种类型算术算术/ /逻辑运算逻辑运算处理整数信息处理整数信息数据传送数据传送在存储器和寄存器之间传送数据在存储器和寄存器之间传

13、送数据在寄存器在寄存器/ /存储器和输入存储器和输入/ /输出设备之间传送数据输出设备之间传送数据控制控制改变指令被执行的顺序改变指令被执行的顺序浮点浮点处理浮点数信息处理浮点数信息数据类型数据类型如果如果ISAISA的操作码能对以某种表示法编码的信息的操作码能对以某种表示法编码的信息进行运算,这种表示法就被称为数据类型进行运算,这种表示法就被称为数据类型DLXDLX的的ISAISA支持的数据类型支持的数据类型二进制补码整数二进制补码整数包括包括8 8位、位、1616位和位和3232位整数位整数浮点数浮点数包括包括3232位单精度和位单精度和6464位双精度浮点数位双精度浮点数寻址模式寻址模式

14、一种计算将要读取一种计算将要读取/ /存储的存储单元的地址的机存储的存储单元的地址的机制制DLXDLX只支持一种寻址模式:基址只支持一种寻址模式:基址+ +偏移量偏移量算术算术/ /逻辑运算指令逻辑运算指令对整数进行处理对整数进行处理3737个算术逻辑运算指令:加、减、乘、除、与、个算术逻辑运算指令:加、减、乘、除、与、或、异或、移位、比较、加载高位立即数等或、异或、移位、比较、加载高位立即数等除加载高位立即数指令外,其他运算指令执行除加载高位立即数指令外,其他运算指令执行的都是二元运算的都是二元运算根据其操作数来源不同根据其操作数来源不同,分为,分为I-I-类型和类型和R-R-类型两类型两种

15、指令格式种指令格式第一个源操作数都来自于指令第一个源操作数都来自于指令25:2125:21所标识的所标识的寄存器中寄存器中第一个第一个源操作数源操作数来自寄存器来自寄存器3232个整数寄存器,个整数寄存器,5 5位编码标识位编码标识25:2125:21,SR1SR1I-I-类型类型R-R-类型类型31 26 25 2120 1615 0操作码操作码SR1DRImm1631 26 25 21 20 16 15 1110 65 0操作码操作码SR1SR2DR未用未用函数函数I-I-类型运算指令类型运算指令第二个源操作数第二个源操作数来自于指令来自于指令15:015:0进行符号扩展得到的进行符号扩展

16、得到的3232位整数,位整数,即即立即立即数数目标操作数目标操作数来自于指令来自于指令20:1620:16所标识的寄存器中所标识的寄存器中31 26 25 2120 1615 0操作码操作码SR1DRImm16ADDIADDIADDADD代表加,代表加,I I代表立即数(代表立即数(ImmediateImmediate)第一个操作数第一个操作数R4R4第二个源操作数在指令中第二个源操作数在指令中15:015:0位符号扩展(位符号扩展(SEXTSEXT)目标操作数写入目标操作数写入R1R131 26 25 21 20 16 15 00 0 0 0 0 10 0 1 0 0 0 0 0 0 1 0

17、 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0ADDIR4R114寄存器堆寄存器堆R00000 0000 0000 0000 0000 0000 0000 00000R1R2R3R40000 0000 0000 0000 0000 0000 0000 01106R29R30R31寄存器堆寄存器堆R00000 0000 0000 0000 0000 0000 0000 00000R10000 0000 0000 0000 0000 0000 0001 010020R2R3R40000 0000 0000 0000 0000 0000 0000 01106R29R30R31ADDIA

18、DDI问题:哪些整数可以用作立即数?问题:哪些整数可以用作立即数?31 26 25 21 20 16 15 00 0 0 0 0 10 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0ADDIR4R114ALU3232ADDR0R1R2R3R4R30R310000000000000000000000000000011000000000000000000000000000010100000001 00100 00001 0000000000001110IRADDIR1R414SEXT16x0000 000E324123SUBISUBI减(减(Su

19、btractSubtract)指令执行结果指令执行结果寄存器寄存器R4R4减减1 1R4R4( (R4)-1R4)-1在同一条指令中一个寄存器既可以作为源操作在同一条指令中一个寄存器既可以作为源操作数也可以作为目标操作数数也可以作为目标操作数对对DLXDLX的所有运算指令都是适用的的所有运算指令都是适用的31 26 25 21 20 16 15 00 0 0 0 1 10 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1SUBIR4R41ANDIANDI指令执行结果:寄存器指令执行结果:寄存器R2R2被清空被清空R2R2( (R2) AND 0

20、R2) AND 0结果结果,R2R2的的3232位全部为位全部为0 031 2625 21 20 16 15 00 0 1 0 0 10 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0ANDIR2R20寄存器堆寄存器堆R00000 0000 0000 0000 0000 0000 0000 00000R1R2*R3R4R29R30R31寄存器堆寄存器堆R00000 0000 0000 0000 0000 0000 0000 00000R1R20000 0000 0000 0000 0000 0000 0000 00000R3R4R29R30R

21、31ORIORI指令执行结果:寄存器指令执行结果:寄存器R3R3被设为被设为-1-1R3R3的的3232位全部为位全部为1 131 2625 21 20 16 15 00 0 1 0 1 00 0 0 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1ORIR3R3-1寄存器堆寄存器堆R00000 0000 0000 0000 0000 0000 0000 00000R1R2R3*R4R29R30R31寄存器堆寄存器堆R00000 0000 0000 0000 0000 0000 0000 00000R1R2R31111 1111 1111 1111 1

22、111 1111 1111 1111-1R4R29R30R31XORIXORI指令执行结果:寄存器指令执行结果:寄存器R5R5被按位取反被按位取反31 26 25 21 20 16 15 00 0 1 0 1 10 0 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1XORIR5R5-1寄存器堆寄存器堆R00000 0000 0000 0000 0000 0000 0000 00000R1R50101 0101 0101 0101 0101 0101 0101 0101x5555 5555R29R30R31寄存器堆寄存器堆R00000 0000 0

23、000 0000 0000 0000 0000 00000R1R51010 1010 1010 1010 1010 1010 1010 1010 xAAAA AAAAR29R30R31SLEISLEI设置是否小于等于条件操作设置是否小于等于条件操作(Set on Less than Set on Less than or Equal toor Equal to)当指令当指令25:2125:21表示的寄存器中的值小于等于表示的寄存器中的值小于等于15:015:0表示的立即数时,表示的立即数时,20:1620:16表示的寄存器中的值被表示的寄存器中的值被设为设为1 1(真),否则设为(真),否则设

24、为0 0(假)(假)如果如果R6=5R6=5,指令执行结果为:寄存器指令执行结果为:寄存器R3R3被设为被设为1 1(因(因为为R6R6的值小于的值小于1010,条件为真),条件为真)31 26 25 21 20 16 15 00 1 0 0 1 00 0 1 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0SLEIR6R310寄存器堆寄存器堆R00000 0000 0000 0000 0000 0000 0000 00000R1R2R3*R60000 0000 0000 0000 0000 0000 0000 01015R29R30R31寄存器堆寄存

25、器堆R00000 0000 0000 0000 0000 0000 0000 00000R1R2R30000 0000 0000 0000 0000 0000 0000 00011R60000 0000 0000 0000 0000 0000 0000 01015R29R30R31SLTISLTI设置是否小于条件操作(设置是否小于条件操作(Set on Less thanSet on Less than)如果如果R6=5R6=5,指令执行结果为:寄存器指令执行结果为:寄存器R3R3被设为被设为1 1(因为(因为R6R6的值小于的值小于1010,条件为真),条件为真)31 2625 2120 1

26、615 00 1 0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0SLTIR6R310寄存器堆寄存器堆R00000 0000 0000 0000 0000 0000 0000 00000R1R2R3*R60000 0000 0000 0000 0000 0000 0000 01015R29R30R31寄存器堆寄存器堆R00000 0000 0000 0000 0000 0000 0000 00000R1R2R30000 0000 0000 0000 0000 0000 0000 00011R60000 0000 0000 0

27、000 0000 0000 0000 01015R29R30R31SEQISEQI设置是否相等条件操作(设置是否相等条件操作(Set on Equal toSet on Equal to)如果如果R6=5R6=5,指令执行结果为:寄存器指令执行结果为:寄存器R3R3被设为被设为0 0(因为(因为R6R6的值不等于的值不等于1010,条件为假),条件为假)31 26 25 21 20 16 15 00 1 0 1 0 00 0 1 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0SEQIR6R310寄存器堆寄存器堆R00000 0000 0000 000

28、0 0000 0000 0000 00000R1R2R3*R60000 0000 0000 0000 0000 0000 0000 01015R29R30R31寄存器堆寄存器堆R00000 0000 0000 0000 0000 0000 0000 00000R1R2R30000 0000 0000 0000 0000 0000 0000 00000R60000 0000 0000 0000 0000 0000 0000 01015R29R30R31SRAISRAI算术右移算术右移立即数操作(立即数操作(Shift Right Shift Right ArithmeticArithmetic)

29、对指令对指令25:2125:21表示的寄存器中的值进行算术右表示的寄存器中的值进行算术右移操作,所移位数为移操作,所移位数为15:015:0表示的立即数表示的立即数31 2625 21 20 16 15 00 0 1 1 1 10 0 1 1 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0SRAIR7R32SRAISRAI如果如果R7=-10R7=-10,指令执行结果为:寄存器指令执行结果为:寄存器R3R3的值的值为为xFFFF FFFDxFFFF FFFD,即,即-3-3(注意,(注意,R7R7是负数,左边补是负数,左边补1 1)R7R7的值除以的值除

30、以4 4的结果,即算术右移表示作除法的结果,即算术右移表示作除法31 2625 21 20 16 15 00 0 1 1 1 10 0 1 1 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0SRAIR7R32寄存器堆寄存器堆R00000 0000 0000 0000 0000 0000 0000 00000R1R2R3*R71111 1111 1111 1111 1111 1111 1111 0110-10R29R30R31寄存器堆寄存器堆R00000 0000 0000 0000 0000 0000 0000 00000R1R2R31111 1111

31、1111 1111 1111 1111 1111 1101-3R71111 1111 1111 1111 1111 1111 1111 0110-10R29R30R31SLLISLLI左移立即数操作(左移立即数操作(Shift Left LogicalShift Left Logical)对指令对指令25:2125:21表示的寄存器中的值进行左移操表示的寄存器中的值进行左移操作,所移位数为作,所移位数为15:015:0表示的立即数,右边补表示的立即数,右边补0 031 2625 21 20 16 15 00 0 1 1 0 10 0 1 1 1 0 0 0 1 1 0 0 0 0 0 0 0

32、0 0 0 0 0 0 0 1 0SLLIR7R32SLLISLLI如果如果R7=-10R7=-10,指令执行结果为:寄存器指令执行结果为:寄存器R3R3的值的值为为xFFFF FFD8xFFFF FFD8,即,即-40-40R7R7的值乘的值乘4 4的结果,即向左移表示作乘法,左移的结果,即向左移表示作乘法,左移1 1位就是位就是乘一次乘一次2 231 2625 21 20 16 15 00 0 1 1 0 10 0 1 1 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0SLLIR7R32寄存器堆寄存器堆R00000 0000 0000 0000 00

33、00 0000 0000 00000R1R2R3*R71111 1111 1111 1111 1111 1111 1111 0110-10R29R30R31寄存器堆寄存器堆R00000 0000 0000 0000 0000 0000 0000 00000R1R2R31111 1111 1111 1111 1111 1111 1101 1000-40R71111 1111 1111 1111 1111 1111 1111 0110-10R29R30R31SRLISRLI逻辑右移立即数操作(逻辑右移立即数操作(Shift Right LogicalShift Right Logical)对指令对

34、指令25:2125:21表示的寄存器中的值进行逻辑右表示的寄存器中的值进行逻辑右移操作,所移位数为移操作,所移位数为15:015:0表示的立即数表示的立即数逻辑右移的含义是:移位后,左边补逻辑右移的含义是:移位后,左边补0 0如果如果R7=-10R7=-10,指令执行结果为:寄存器指令执行结果为:寄存器R3R3的值为的值为x3FFF x3FFF FFFDFFFD31 2625 21 20 16 15 00 0 1 1 1 00 0 1 1 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0SRLIR7R32寄存器堆寄存器堆R00000 0000 0000 0

35、000 0000 0000 0000 00000R1R2R3R71111 1111 1111 1111 1111 1111 1111 0110-10R29R30R31寄存器堆寄存器堆R00000 0000 0000 0000 0000 0000 0000 00000R1R2R30011 1111 1111 1111 1111 1111 1111 1101x3FFF FFFDR71111 1111 1111 1111 1111 1111 1111 0110-10R29R30R31LHILHILHILHI指令指令:加载高位立即数操作加载高位立即数操作,将立即数左移将立即数左移1616位后,加载到目

36、标操作数中位后,加载到目标操作数中R2R2 x12340000 x12340000R2R2 x12340000+x00005678 x12340000+x00005678,R2R2 x12345678 x12345678将某个较大的常数赋值给某个寄存器将某个较大的常数赋值给某个寄存器31 26 25 2120 1615 00 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0LHIR2x123431 26 25 2120 1615 00 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 1 0 1 0 1 1

37、 0 0 1 1 1 1 0 0 0ADDIR2R2x5678寄存器堆寄存器堆R00R1R2*R3R4R29R30R31寄存器堆寄存器堆R00000 0000 0000 0000 0000 0000 0000 0000R1R20001 0010 0011 0100 0000 0000 0000 0000R3R4R29R30R31寄存器堆寄存器堆R00000 0000 0000 0000 0000 0000 0000 0000R1R20001 0010 0011 0100 0101 0110 0111 1000R3R4R29R30R31R-R-类型运算指令类型运算指令第二个源操作数第二个源操作数

38、来自于指令来自于指令20:1620:16所标识的寄存器中所标识的寄存器中目标操作数目标操作数来自于指令来自于指令15:1115:11所标识的寄存器中所标识的寄存器中31 26 25 21 20 16 15 1110 65 0操作码操作码SR1SR2DR未用未用函数函数ADDADD31 2625 21 20 16 15 11 10 6 5 00 0 0 0 0 00 0 1 0 0 0 0 0 1 0 0 0 0 0 10 0 0 0 00 0 0 0 0 1R-类型类型R4R2R1未用未用ADD操作码操作码000000000000,R-R-类型类型5:05:0为为000001000001,AD

39、DADD函数函数寄存器堆寄存器堆R00000 0000 0000 0000 0000 0000 0000 00000R1*R20000 0000 0000 0000 0000 0000 0000 00113R3R40000 0000 0000 0000 0000 0000 0000 01106R29R30R31寄存器堆寄存器堆R00000 0000 0000 0000 0000 0000 0000 00000R10000 0000 0000 0000 0000 0000 0000 10019R20000 0000 0000 0000 0000 0000 0000 00113R3R40000 0

40、000 0000 0000 0000 0000 0000 01106R29R30R31ADDADD除除LHILHI指令外,其他运算指令均有指令外,其他运算指令均有I-I-类型和类型和R-R-类型指令,其解释均与类型指令,其解释均与之之类似类似31 2625 21 20 16 15 11 10 6 5 00 0 0 0 0 00 0 1 0 0 0 0 0 1 0 0 0 0 0 10 0 0 0 00 0 0 0 0 1R-类型类型R4R2R1未用未用ADDALU3232ADDR0R1R2R3R4R30R310000000000000000000000000000011000000000000

41、000000000000000001001412300000000000000000000000000000011数据传送指令数据传送指令存储器和通用寄存器之间存储器和通用寄存器之间:本章:本章寄存器和输入寄存器和输入/ /输出设备之间输出设备之间:第第1212章章整数寄存器与特殊寄存器之间整数寄存器与特殊寄存器之间:第第1313章章还包括还包括整数寄存器与浮点数寄存器之间,存储整数寄存器与浮点数寄存器之间,存储器和输入器和输入/ /输出设备之间传送数据输出设备之间传送数据加载加载/ /存储存储加载(加载(loadload):将数据从存储器移动到寄存器将数据从存储器移动到寄存器的过程的过程存储

42、(存储(storestore):将数据从寄存器移动到存储器将数据从寄存器移动到存储器的过程的过程LBLB和和SBSB:加载和存储一个加载和存储一个8 8位的位的字节字节,在一个存,在一个存储单元和一个寄存器之间传送数据储单元和一个寄存器之间传送数据LWLW和和SWSW:加载和存储一个加载和存储一个3232位的位的字字,在,在4 4个连续个连续的存储单元和一个寄存器之间传送数据的存储单元和一个寄存器之间传送数据I-I-类型类型指令的指令的25:2125:21位指位指明明了源操作数了源操作数SR1SR120:1620:16位指明了目标操作数位指明了目标操作数DRDR加载加载:DRDR寄存器将在从存

43、储器读取数据之后,寄存器将在从存储器读取数据之后,包含该数值(指令完成时)包含该数值(指令完成时)存储存储:DRDR寄存器则包含了要被写到存储器中的寄存器则包含了要被写到存储器中的数值数值如何在如何在3232位的指令中声明一个位的指令中声明一个3232位的存储单元位的存储单元地址?地址?“基址基址寄存器寄存器+ +偏移量偏移量”的寻址模式的寻址模式31 26 25 2120 1615 0操作码操作码SR1DRImm16基址寄存器基址寄存器+ +偏移量偏移量存储单元的地址存储单元的地址:将将1616位的偏移量进行符号扩位的偏移量进行符号扩展后,与一个基址寄存器相加得到展后,与一个基址寄存器相加得

44、到1616位的偏移量是从指令中得到的,是位的偏移量是从指令中得到的,是15:015:0位位偏移量值偏移量值:在在-2-21515到到2 21515-1-1之间的二进制补码整数之间的二进制补码整数基址寄存器则使用指令的基址寄存器则使用指令的25:2125:21位来说明,即位来说明,即SR1SR1LWLW31 26 25 21 20 16 15 001110000010000010001001000 110100LWR2R1x1234地址地址x5678 12340000 1111 x5678 12350000 1111x5678 12360000 1111x5678 12370000 1111寄存

45、器堆寄存器堆R00000 0000 0000 0000 0000 0000 0000 00000R1*R20101 0110 0111 1000 0000 0000 0000 0000 x5678 0000R3R4R29R30R31寄存器堆寄存器堆R00000 0000 0000 0000 0000 0000 0000 00000R10000 1111 0000 1111 0000 1111 0000 1111x0F0F 0F0FR20101 0110 0111 1000 0000 0000 0000 0000R3R4R29R30R31基址基址+ +偏移量偏移量(R2R2)+ x0000 12

46、34+ x0000 1234x56781234x56781234LWLW31 26 25 21 20 16 15 001110000010000010001001000 110100LWR2R1x123432R0R1R2R3R29R30R310000 1111 0000 1111 0000 1111 0000 1111IRLWR2x1234SEXT15:0位位x00001234R1011100 00010 00001 0001 0010 0011 01000101 0110 0111 1000 0000 0000 0000 0000ALU3232ADD4存储器存储器1234将将x5678123

47、4 x56781234 x56781237x56781237中的中的内容(假设其值内容(假设其值为为x0F0F0F0Fx0F0F0F0F)加载到加载到R1R1SWSW“基址(基址(R2R2)+ +偏移量(偏移量(x0000 1234x0000 1234)”计算计算的结果是的结果是x56781234x56781234取出取出R1R1中的数值中的数值(如(如x0F0F0F0Fx0F0F0F0F),存储于,存储于x56781234x56781237x56781234x56781237单元中单元中31 2625 21 20 16 15 00 1 1 1 0 10 0 0 1 0 0 0 0 0 1 0

48、 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0SWR2R1x1234寄存器堆寄存器堆R00000 0000 0000 0000 0000 0000 0000 00000R10000 1111 0000 1111 0000 1111 0000 1111x0F0F 0F0FR20101 0110 0111 1000 0000 0000 0000 0000 x5678 0000R3R4R29R30R31地址地址x5678 12340000 1111 x5678 12350000 1111x5678 12360000 1111x5678 12370000 1111R0R0绝对地址绝对地址

49、如果如果SR1SR1为为R0R0,由于,由于R0=R0=零,零,“基址基址+ +偏移量偏移量”的的计算结果就是计算结果就是IR15:0IR15:0经过符号扩展得到的值,经过符号扩展得到的值,该值就是访问存储器的地址该值就是访问存储器的地址加载指令不可使用加载指令不可使用R0R0作为目标寄存器作为目标寄存器存储指令使用存储指令使用R0R0作为作为DRDR表示存储到存储单元的是数值表示存储到存储单元的是数值0 0边界对齐边界对齐LW/SWLW/SW指令指令:加载加载/ /存储一个存储一个3232位的字位的字“基址基址+ +偏移量偏移量”的计算结果是的计算结果是4 4个连续的存储单个连续的存储单元的

50、低地址,必须是元的低地址,必须是4 4的倍数的倍数LBLB基址基址+ +偏移量偏移量(R2R2)+ x0000 1234+ x0000 1234x56781234x56781234符号扩展符号扩展到到3232位位31 2625 21 20 16 15 00 1 0 1 1 00 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0LBR2R1x1234地址地址x5678 12340000 1111 x5678 1235*x5678 1236*x5678 1237*寄存器堆寄存器堆R00000 0000 0000 0000 0000 0000 000

51、0 00000R1*R20101 0110 0111 1000 0000 0000 0000 0000 x5678 0000R3R4R29R30R31寄存器堆寄存器堆R00000 0000 0000 0000 0000 0000 0000 00000R10000 0000 0000 0000 0000 0000 0000 111115R20101 0110 0111 1000 0000 0000 0000 0000R3R4R29R30R31SBSB基址基址+ +偏移量偏移量(R2R2)+ x0000 1234+ x0000 1234x56781234x56781234R1R1中数值中数值低低8

52、 8位位31 2625 21 20 16 15 00 1 0 1 1 10 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0SBR2R1x1234寄存器堆寄存器堆R00000 0000 0000 0000 0000 0000 0000 00000R10000 1111 0000 1111 0000 1111 0000 1111x0F0F 0F0FR20101 0110 0111 1000 0000 0000 0000 0000 x5678 0000R3R4R29R30R31地址地址x5678 12340000 1111 x5678 1235*x

53、5678 1236*x5678 1237*示例示例地址地址31 2625 2120 1615 1110 65 0 x4000 000000110000000000010100 0000 0000 0000LHI R1, x4000 x4000 000400000100000000100000 0000 0000 0101ADDI R2, R0, 5x4000 000801110100001000100000 0000 0001 0000SW 16(R1), R2x4000 000C01110000001000110000 0000 0001 0000LW R3, 16(R1)x4000 001

54、0寄存器堆寄存器堆R00000 0000 0000 0000 0000 0000 0000 00000R1R2R3R4R29R30R31LHILHI地址地址31 2625 2120 1615 1110 65 0 x4000 000000110000000000010100 0000 0000 0000LHI R1, x4000 x4000 000400000100000000100000 0000 0000 0101ADDI R2, R0, 5x4000 000801110100001000100000 0000 0001 0000SW 16(R1), R2x4000 000C01110000

55、001000110000 0000 0001 0000LW R3, 16(R1)x4000 0010R1R1 x4000 0000 x4000 0000寄存器堆寄存器堆R00000 0000 0000 0000 0000 0000 0000 00000R1R2R3R4R29R30R31寄存器堆寄存器堆R00000 0000 0000 0000 0000 0000 0000 00000R10100 0000 0000 0000 0000 0000 0000 0000 x4000 0000R2R3R4R29R30R31ADDIADDI地址地址31 2625 2120 1615 1110 65 0

56、x4000 000000110000000000010100 0000 0000 0000LHI R1, x4000 x4000 000400000100000000100000 0000 0000 0101ADDI R2, R0, 5x4000 000801110100001000100000 0000 0001 0000SW 16(R1), R2x4000 000C01110000001000110000 0000 0001 0000LW R3, 16(R1)x4000 0010R2R2 (R0R0)+ 5+ 5寄存器堆寄存器堆R00000 0000 0000 0000 0000 0000

57、 0000 00000R10100 0000 0000 0000 0000 0000 0000 0000 x4000 0000R2R3R4R29R30R31寄存器堆寄存器堆R00000 0000 0000 0000 0000 0000 0000 00000R10100 0000 0000 0000 0000 0000 0000 0000 x4000 0000R20000 0000 0000 0000 0000 0000 0000 01015R3R4R29R30R31SWSW地址地址31 2625 2120 1615 1110 65 0 x4000 00000011000000000001010

58、0 0000 0000 0000LHI R1, x4000 x4000 000400000100000000100000 0000 0000 0101ADDI R2, R0, 5x4000 000801110100001000100000 0000 0001 0000SW 16(R1), R2x4000 000C01110000001000110000 0000 0001 0000LW R3, 16(R1)x4000 00100000 0000 0000 0000 0000 0000 0000 0101基址基址+ +偏移量:偏移量: x4000 0000 + x0000 0010 x4000

59、0000 + x0000 0010寄存器堆寄存器堆R00000 0000 0000 0000 0000 0000 0000 00000R10100 0000 0000 0000 0000 0000 0000 0000 x4000 0000R20000 0000 0000 0000 0000 0000 0000 01015R3R4R29R30R31地址地址x4000 00100000 0000 x4000 00110000 0000 x4000 00120000 0000 x4000 00130000 0101LWLW地址地址31 2625 2120 1615 1110 65 0 x4000 0

60、00000110000000000010100 0000 0000 0000LHI R1, x4000 x4000 000400000100000000100000 0000 0000 0101ADDI R2, R0, 5x4000 000801110100001000100000 0000 0001 0000SW 16(R1), R2x4000 000C01110000001000110000 0000 0001 0000LW R3, 16(R1)x4000 00100000 0000 0000 0000 0000 0000 0000 0101基址基址+ +偏移量:偏移量:x4000 000

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论