第2章 指令:计算机的语言.ppt

上传人:eventdump275 文档编号:374612 上传时间:2018-10-06 格式:PPT 页数:104 大小:3.07MB
下载 相关 举报
第2章 指令:计算机的语言.ppt_第1页
第1页 / 共104页
第2章 指令:计算机的语言.ppt_第2页
第2页 / 共104页
第2章 指令:计算机的语言.ppt_第3页
第3页 / 共104页
第2章 指令:计算机的语言.ppt_第4页
第4页 / 共104页
第2章 指令:计算机的语言.ppt_第5页
第5页 / 共104页
亲,该文档总共104页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、第2章 指令:计算机的语言,计算机中的信息分为:,数值型数据,数据信息,控制信息,非数值型数据,2.1 数据信息的表示方法,数值型数据的完整表示: 采用什么进位计数制(逢几进位) 如何使符号数字化(机器数的编码方法) 如何处理小数点位置(定点表示、浮点表示),2.1.1进位计数制及转换,一. 基本概念 r进制一般的,在r进制下,数,该位数字(0r-1),基数:指该进位制中允许选用的基本数码的个数,权:权的大小是以基数为底,该位数字所在位置的序号为指数的整数次幂。,所代表的数值可以表示为:,例:,2.1.1进位计数制及转换,二. 各种数制之间的转换 1.十进制转换为二进制整数 : 规则:连续“除

2、以2取余,直到商为0” 例1:(116)10 = ( )2,2.1.1进位计数制及转换,例1:(116)10 = ( )2(116)10 = ( 1110100 )2 例2:29D =( )B,11101,2.1.1进位计数制及转换,小数: 规则:连续“乘以2取整,直到小数部分为0” 例1: 0.8125D =( )B 0.8125 2 = 1.625 1 0.625 2 = 1.25 1 0.25 2 = 0.5 0 0.5 2 = 1 1 因此:0.8125D =(0. 1101 )B 例2:0.375D =( )B,0.011,2.1.1进位计数制及转换,2. 二进制转化为十进制 规则:

3、按权相加 例1:,例2:,2.1.2 机器数的编码格式,机器数是指数在计算机中的表示形式,一般是采用某种编码形式表示带符号的二进制数。真值是指机器数所对应的实际数值。常用的机器数形式有:原码、补码、反码。,2.1.2 机器数的编码格式,一. 原码表示法(符号和幅值表示法)规定:最高位为符号位(0为正,1为负),其余有效数值部分用二进制的绝对值表示。,2.1.2 机器数的编码格式,注意: 1)0可分+0和-0。+0 为 0.00-0为 1.00 2)符号位和数值无关,不能作为数值的一部分直接参与运算,在运算中要额外增加一步处理。 3)原码表示的数取不到端点小数: |X|1整数:|X|2n,2.1

4、.2 机器数的编码格式,二. 补码表示法 1.模,13,-2,模为12,例:11-2 = ? 11- 2 = 11+10= 2121-12 = 9,2.1.2 机器数的编码格式,2. 补码定义X补 = M + X (mod M),定点小数的补码可定义为:,定点整数的补码可定义为:,2.1.2 机器数的编码格式,3. 补码的性质 符号位是数值的一部分,可以与尾数一起直接参与运算,不需要单独处理。 所有负数的最高有效位都是1,硬件只需检测该位就可判断是正数还是负数。 数0只有一种表示,即000。 补码可以取到负方向最值。,2.1.2 机器数的编码格式,4. 原码与补码的互换 正数:补码表示与原码表

5、示相同 负数:原码的符号位保持不变,其余各位取反,末位再加1。 例:,X原 =1.1010,变反: 1.0101,末位加1: 1,X补 =1.0110,2.1.2 机器数的编码格式,5.补码转换十进制数 32位二进制补码可按如下公式转换:,例:见课本P50例题,2.1.2 机器数的编码格式,6.二进制补码的相关操作: 1)对二进制补码数取反(正数,负数),2.1.2 机器数的编码格式,例:对210 求反(字长32位) 解:210=0000 0000 0000 0000 0000 0000 0000 001021111 1111 1111 1111 1111 1111 1111 11012+ 1

6、2 = 1111 1111 1111 1111 1111 1111 1111 11102= -210,2.1.2 机器数的编码格式,2)符号扩展 用于将一个用n位表示的二进制数转化成一个用多于n位表示的数。 将最高有效位(符号位)以复制的方式填 满高位部分。,2.1.2 机器数的编码格式,三. 反码表示法 反码表示规则: 正数的反码:与原码相同 负数的反码:符号位为1,尾数由原码按位取反。,2.1.3 数值数据的表示方法,根据数据中小数点位置是否固定,将数的格式分为定点表示和浮点表示。,2.1.3 数值数据的表示方法,一.定点表示法(小数点位置不变)(1)小数点位置事先隐含约定(2)若小数点固

7、定在符号位之后,则该数是一个纯小数。例如 N=0.110101001(3)若把小数点定在最末位之后,这时表示一个纯整数(定点整数)。例如 N=01011010,2.1.3 数值数据的表示方法,二. 浮点表示法 1. 通用浮点数表示形式:任何一个二进制数N都可以表示为N=(-1)SF2E其中S表示浮点数的符号(1表示负数),F称为数N的尾数,表示数N的全部有效数据,其值在0和1之间。 E是一个二进制整数,称为数N的指数(或称为阶码),指明该数的小数点位置,表示数据的大小范围。 如:N=(-1)00.10110102011 N=(-1)10.11100102-1,2.1.3 数值数据的表示方法,M

8、IPS中浮点数的表示如下: 单精度浮点数:32位,其中,S为浮点数的符号位,指数域为8位宽(包括指数的符号位),尾数域为23位宽。浮点数表示法可扩大数值的表示范围,但依然可能会因数太大而不能表示。,2.1.3 数值数据的表示方法,双精度浮点数:两个32位,其中,S为浮点数的符号位,指数域为11位宽(包括指数的符号位),尾数域为52位宽。,2.1.3 数值数据的表示方法,几个相关概念: 科学计数法:十进制小数点左边只有一位整数的记数法。 规格化数:一个采用科学记数法表示的数,若没有前导零且小数点左边只有一位整数,则可称为规格化数。 如: 1.01010-9 0.11010-9 10.01010-

9、9 二进制规格化浮点数尾数部分的小数点左边只保留一位非零数。,2.1.3 数值数据的表示方法,采用规格化科学记数法的优点: -简化了浮点数的数据交换 -简化了浮点算术算法 -提高了用一个字存储的数的精度 偏移(移码)表示法 在浮点数加减中,将两数的指数调整为相同。 若指数用补码表示,不易比较其大小。,2.1.3 数值数据的表示方法,为更直观比较指数的大小,可用移码表示浮点数的指数。,2.1.3 数值数据的表示方法,移码定义:E移 = E+BiasE为指数的真值,Bias 为偏阶,通常 Bias= 2n ,其中,n为指数的数码位位数, 2n 是符号位的位权。,2.1.3 数值数据的表示方法,2.

10、 IEEE 754浮点标准:N=(-1)S(1+Fraction)2(Exponent-Bias) 注: IEEE 754 标准隐藏规格化二进制数的前导位1,因此,Fraction只是尾数域的值,其值在0和1之间,真正有效位的值为: 1+Fraction 。 Exponent是指数域的值,Exponent-Bias指明该数的小数点位置,表示数据的大小范围。 IEEE 754规定:单精度浮点数的偏阶为127,即:Bias=127双精度浮点数的偏阶为1023,即:Bias=1023,2.1.3 数值数据的表示方法,N=(-1)S(1+Fraction)2(Exponent-Bias) 在MIPS中

11、的表示 :,单精度:,双精度:,2.1.3 数值数据的表示方法,注意: 由于0 没有前导位1,它的指数保留为0,所以硬件就不会将前导位1加到尾数上。因此,0 的表示为00002。 其它数的表示依然采用前面的形式。,2.1.3 数值数据的表示方法,3. 例1:分别用IEEE 754 的单精度和双精度格式来表示-0.7510。 解:先将-0.7510转换为二进制小数形式:N = -0.7510 = -0.112科学记数表示为:N = -0.112 20规格化的科学记数表示为:N = -1.12 2-1,2.1.3 数值数据的表示方法,N = -1.12 2-1 由于单精度表达式为: N=(-1)S

12、(1+Fraction)2(Exponent-Bias) 所以:Fraction = (1.1 - 1 )2= 0.12Exponent = -1 + 127 = 126 最终,单精度二进制格式为:,2.1.3 数值数据的表示方法,N = -1.12 2-1 由于双精度 中:Bias = 1023 所以:Fraction = (1.1 - 1 )2= 0.12 Exponent = -1 + 1023 = 1022 最终,双精度二进制格式为:,2.1.3 数值数据的表示方法,例2:将X = 23(-13/16)用IEEE 754的单精度浮点格式来表示。,解:X = 23(-0.8125)10=

13、 23(-0.1101)2 规格化的科学记数表示为: X = -1.1012 22 Fraction = (1.101 - 1 )2= 0.1012 Exponent = 2+ 127 = 129,2.1.3 数值数据的表示方法,X = -1.1012 22 Fraction = (1.101 - 1 )2= 0.1012 Exponent = 2+ 127 = 129 所以,单精度二进制格式为:,2.1.4 字符的表示,一. ASCII码“美国标准信息交换代码”(American Standard Code for Information Interchange),简称ASCII码。使用8位

14、的字节来表示字符。(见课本P72 图2-15) 二. UnicodeUnicode是大多数人类语言中字母的通用编码。通常采用16位来表示一个字符。(见课本P74 图2-16),2.2 MIPS指令集,2.2.1 基本概念: 一. 指令集 一个给定的计算机体系结构所包含的指令集合。 常见的指令集:MIPS,ARMv7, ARMv8,Intel x86 二. 存储程序概念多种类型的指令和数据均以数字形式存储于存储器中。,2.2.2 MIPS的操作数,一. 相关规定: MIPS算术运算指令的操作数必须来自寄存器。 寄存器大小:32位。 寄存器个数:32个。 寄存器的表示: $s0, $s1, 表示C

15、程序中的变量所对应的寄存器。$t0, $t1, 表示将程序编译为MIPS指令时所需的临时寄存器。(其它各寄存器的表示及功能见课本P71图2-14),2.2.2 MIPS的操作数,例: 使用寄存器编译C赋值语句C codef = ( g + h ) ( i + j ) ;MIPS codeadd $t0, $s1, $s2 # $t0 contains g + hadd $t1, $s3, $s4 # $t1 contains i + jsub $s0, $t0, $t1 # f gets $t0 - $t1,2.2.2 MIPS的操作数,二. 存储器操作数 用于存放复杂的数据结构(如数组和结构

16、) 编址方式:按字节编址,一个字占4个字节。 通过数据传送指令实现存储器和寄存器之间数据的传送。-取数(load)指令:lw-存数(store)指令:sw,2.2.2 MIPS的操作数,例1:使用取/存数指令进行编译 C code:A12 = h + A8 ; / A is an array of 100 words ( Assume: h - $s2 base address of A - $s3 )MIPS code:lw $t0 , 32($s3) # temporary reg $t0 gets A8add $t0, $s2, $ t0 # temporary reg $t0 gets

17、 h + A8sw $t0, 48($s3) # stores h + A8 back into A12,2.2.2 MIPS的操作数,讨论:如何编译?,g = h + Ai,( Assume: g, h, i - $s1, $s2, $s4 base address of A - $s3 ),2.2.2 MIPS的操作数,例2:Compiling using a variable array index C code:g = h + Ai ; / A is an array of 100 words ( Assume: g, h, i - $s1, $s2, $s4 base address

18、 of A - $s3 )MIPS code: add $t1, $s4, $s4 # temp reg $t1 = 2 * iadd $t1, $t1, $t1 # temp reg $t1 = 4 * iadd $t1, $t1, $s3 # $t1 = address of Ai (4 * i + $s3)lw $t0 , 0($t1) # temp reg $t0 = Aiadd $s1, $s2, $t0 # g = h + Ai,2.2.2 MIPS的操作数,寄存器溢出(spilling) 将不常使用的变量(或稍后才使用的变量)存回到存储器中的过程。 实现:使用取数/存数指令,2.

19、2.2 MIPS的操作数,三. 常数或立即数操作数 程序中经常会在某个操作中使用到常数,如: 将数组的下标加1,用以指向下一个数组元素。 例:使寄存器$s3的内容加4 。- 方法一常数被事先存放在存储器中。假设 AddrConstants4 是常数4 在内存中相对于$ s1的偏移地址。lw $t0, AddrConstant4($s1) # $t0=constant 4add $s3, $s3, $t0 #$s3=$s3+$t0($t0=4),2.2.2 MIPS的操作数,- 方法二在算术指令中直接提供一个常数。addi $s3, $s3, 4 #$s3= $s3+ 4 优点:速度快,能耗低,

20、小结,MIPS operands,MIPS assembly language,2.2.3 MIPS指令的表示,计算机中所有的信息都表示成二进制位串。寄存器对应的数(编号) $s0 $s7 对应16 23 $t0 $t7 对应 8 15例:将以下MIPS语言指令翻译成机器指令MIPS codeadd $t0, $s1, $s2Decimal version of machine code | 0 | 17 | 18 | 8 | 0 | 32 |Binary version of machine code | 000000 | 10001 | 10010 | 01000 | 00000 | 10

21、0000 |6 bits 5 bits 5 bits 5 bits 5 bits 6 bits,一. MIPS指令格式,op:指令的基本操作,通常称为操作码 rs: 第一个源操作数寄存器 rt: 第二个源操作数寄存器 rd: 用于存放操作结果的目的寄存器 shamt: 位移量 funct: 功能。一般称为功能码,用于指明op字段中操作的特定变式。,Region: 215,指令长度相同,都为32位。,2.2.3 MIPS指令的表示,例:Translating assembly into machine instruction C code:A300 = h + A300 ;( Assume: h

22、 - $s2 base address of A - $t1 ) MIPS assembly code: lw $t0, 1200($t1) # temporary reg $t0 gets A300 add $t0, $s2, $t0 # temporary reg $t0 gets h + A300 sw $t0, 1200($t1) # stores h + A300 back into A300 MIPS machine language code: Decimal version : address/op rs rt rd shamt funct| 35 | 9 | 8 | 1200

23、 | 0 | 18 | 8 | 8 | 0 | 32 | 43 | 9 | 8 | 1200 |,2.2.3 MIPS指令的表示,MIPS machine language code: Decimal version : address/op rs rt rd shamt funct| 35 | 9 | 8 | 1200 | 0 | 18 | 8 | 8 | 0 | 32 | 43 | 9 | 8 | 1200 | Binary version| 100011 | 01001 | 01000 | *0000 0100 1011 0000 | 000000 | 10010 | 01000 | 0

24、1000 | 00000 | 100000 | 101011 | 01001 | 01000 | 0000 0100 1011 0000 |注意:第一条和最后一条指令唯一的不同仅在于操作码!,2.2.3 MIPS指令的表示,二.两个重要准则: 指令用数的形式表示。 和数据一样,程序存储在存储器中,并且可以读写。,2.2.4 逻辑操作,C、Java和MIPS中的逻辑操作,2.2.4 逻辑操作,一. 移位(shift) 1. 逻辑左移(sll): 将一个字里面的所有位向左移动,并在空出来的位上填充0。 左移i位相当于乘以 2i 2. 逻辑右移(srl): 将一个字里面的所有位向右移动,并在空出来的

25、位上填充0。 右移i位相当于除以 2i,2.2.4 逻辑操作,3. 指令格式 R型 例: sll $t2, $s0, 4 #reg $t2=reg $s04 bit 对应的机器语言:,在移位指令中表示位移量,2.2.4 逻辑操作,二. 按位与(AND)按位进行与操作,仅当两个操作位均为1时结果才为1。 例: $t2: 0000 0000 0000 0000 0000 1101 0000 0000 $t1: 0000 0000 0000 0000 0011 1100 0000 0000 and $t0, $t1, $t2 #reg $t0 = reg $t1 & reg $t2Result: 0

26、000 0000 0000 0000 0000 1100 0000 0000,2.2.4 逻辑操作,三. 按位或(OR)按位进行或操作,当两个操作位中任意一位为1时结果就为1。 例: $t2: 0000 0000 0000 0000 0000 1101 0000 0000 $t1: 0000 0000 0000 0000 0011 1100 0000 0000or $t0, $t1, $t2 #reg $t0=reg $t1 | reg $t2 Result:0000 0000 0000 0000 0011 1101 0000 0000,2.2.4 逻辑操作,四. 按位取反(NOT) 仅有一位

27、操作数,将1变成0,0变成1。 MIPS中用或非(NOR)指令取代NOT。- A NOR 0 =NOT(A OR 0)=NOT(A) - 保持三操作数格式 例: $t1: 0000 0000 0000 0000 0011 1100 0000 0000 $t3: 0000 0000 0000 0000 0000 0000 0000 0000 nor $t0, $t1, $t3 #reg $t0=(reg $t1 | reg $t3) Result:1111 1111 1111 1111 1100 0011 1111 1111,2.2.4 逻辑操作,五. 立即数与(andi)和立即数或(ori)指

28、令指令格式:I型,2.2.5 决策指令,分支指令 I型beq register1, register2, L1 相等则分支bne register1, register2, L1 不相等则分支例1:将以下if 语句编译成条件分支指令C code:if ( i = = j ) goto L1 ;f = g + h ;L1: f = f - i ; ( Assume: f j - $s0 $s4 )MIPS assembly code:beq $s3, $s4, L1 # go to L1 if i equals jadd $s0, $s1, $s2 # f = g + h ( skipped i

29、f i equals j )L1: sub $s0, $s0, $s3 # f = f - i ( always executed ),2.2.5 决策指令,例2:将以下if-then-else 语句编译成条件分支指令( Assume: f j - $s0 $s4 ) C code:if ( i = = j ) f = g + h ; else f = g - h ; MIPS assembly code:bne $s3, $s4, Else # go to Else if i jadd $s0, $s1, $s2 # f = g + h ( Executed if i = = j if)j

30、Exit # go to ExitElse: sub $s0, $s1, $s2 # f = g - h ( Executed if i j else) Exit: # the first instruction of the next C statement,2.2.5 决策指令,一. While 循环语句 例:编译以下 while 循环语句( Assume: i k- $s3 $s5 base of save - $s6 )C code:while ( savei = = k )i = i + j ;MIPS assembly code:Loop: add $t1, $s3, $s3 #

31、temp reg $t1 = 2 * iadd $t1, $t1, $t1 # temp reg $t1 = 4 * iadd $t1, $t1, $s6 # $t1 = address of saveilw $t0, 0($t1) # temp reg $t0 = saveibne $t0, $s5, Exit # go to Exit if savei != kadd $s3, $s3, $s4 # i = i + jj Loop # go to LoopExit:,2.2.5 决策指令,小于则置位指令(slt)R型如果第一个寄存器小于第二个寄存器,则将第三个寄存器设置为1,否则设置为0。

32、 如:slt $t0, $s3, $s4 # $t0=1 if $s3 $s4 立即数版小于则置位指令(slti)I型如:slti $t0, $s2, 10 # $t0=1 if $s2 10无符号整数版小于则置位指令(sltu)如:sltu $t0, $s3, $s4 # $t0=1 if $s3 $s4,2.2.5 决策指令,例:有符号比较和无符号比较 假设:$s0:1111 1111 1111 1111 1111 1111 1111 11112$s1:0000 0000 0000 0000 0000 0000 0000 00002 执行以下两条指令后,求寄存器$t0和$t1 中的值。sl

33、t $t0, $s0, $s1sltu $t1, $s0, $s1答案: $t0:1 $t1:0,2.2.5 决策指令,二. case/switch语句 用于根据某个变量的值选择不同分支之一。 实现方法:将多个指令序列分支的地址编码为一张表(转移地址表或转移表),程序只需索引该表即可跳转到恰当的指令序列。,2.2.5 决策指令,例:使用转移地址表(jump address table)编译switch语句( Assume: f k - $s0 $s5 $t2 contains 4 )C code:switch ( k ) case 0 : f = i + j ; break ; /* k =

34、0 */case 1 : f = g + h ; break ; /* k = 1 */case 2 : f = g - h ; break ; /* k = 2 */case 3 : f = i - j ; break ; /* k = 3 */,2.2.5 决策指令,寄存器跳转指令R型jr $r 转移地址表,$t4,$r($t4+4*K),L0: add $s0, $s3, $s4 # k = 0 so f gets i + jj Exit # end of this case so go to Exit L1: add $s0, $s1, $s2 # k = 1 so f gets g

35、+ hj Exit # end of this case so go to Exit L2: sub $s0, $s1, $s2 # k = 2 so f gets g - hj Exit # end of this case so go to Exit L3: sub $s0, $s3, $s4 # k = 3 so f gets i - jExit: # end of switch statement,MIPS assembly code:slt $t3, $s5, $zero # test if k = 4, go to Exitadd $t1, $s5, $s5 # temp reg

36、$t1 = 2 * k (0=k=3)add $t1, $t1, $t1 # temp reg $t1 = 4 * kadd $t1, $t1, $t4 # $t1 = address of JumpTableklw $t0, 0($t1) # temp reg $t0 = JumpTablekjr $t0 # jump based on register $t0,jump address table$t1= $t4+4 * k:,L0:address L1:address L2: address L3:address,2.2.5 决策指令,一个重要概念: 基本块:没有分支(可能出现在末尾者除

37、外)并且没有分支目标/分支标签(可能出现在开始者除外)的指令序列。顺序执行的语句序列,其中只有一个入口和一个出口-只有一个入口,表示程序中不会有其它任何地方能通过分支指令进入到此基本块中。-只有一个出口,表示程序只有最后一条指令能导致进入到其它基本块去执行。编译最初阶段的任务之一就是将程序分解为若干基本块。,2.2.6 硬件对过程的支持,一 . 定义:过程:根据提供的参数执行一定任务的存储的子程序。 有助于提高程序的可理解性和代码的可重用性。 通过参数传递数值并返回结果。 二. MIPS在过程调用时对寄存器的分配:$a0 $a3: 用于传递参数的4个参数寄存器$v0 $v1: 用于返回值的两个

38、值寄存器$ra: 用于返回起始点的返回地址寄存器,2.2.6 硬件对过程的支持,三. 过程调用指令 程序计数器(PC):保存当前运行的指令的地址 调用者:跳转和链接指令J型 jal ProcedureAddress 被调用者:寄存器跳转R型jr $ra 四. 使用更多的寄存器 栈:换出寄存器的最理想的数据结构 基本操作:压栈(push),出栈(pop) 栈指针( $sp ),PC+4$ra,例:编译一段叶过程( Assume: g j - $a0 $a3 f - $s0)C code:int leaf_example ( int g, int h, int i, int j )int f ;

39、f = ( g + h ) - ( i + j ) ;return f ;MIPS assembly code:addi $sp, $sp,-12 # adjust stack to make room for 3 items sw $t1, 8($sp) #These three instructions save three sw $t0, 4($sp) # register $t1,$t0,$s0sw $s0, 0($sp) # Lets consider why it need to be done.,Save value,Return value,add $t0, $a0, $a1

40、# register $t0 contains g + hadd $t1, $a2, $a3 # register $t1 contains i + jsub $s0, $t0, $t1 # f = $t0 - $t1, which is ( g + h ) ( i + j )add $v0, $s0, $zero # returns f ( $v0 = $s0 + 0)lw $s0, 0($sp) # restore register $s0 for callerlw $t0, 4($sp) # restore register $t0 for callerlw $t1, 8($sp) #

41、restore register $t1 for calleraddi $sp, $sp, 12 # adjust stack to delete 3 itemsjr $ra # jump back to calling routine注:MIPS对18个寄存器是否被保存作如下分组: $t0 $t9: 10 个临时寄存器, 在过程调用中不必被调用者保存。 $s0 $s7: 8 个保留寄存器, 必须被保存。,2.2.6 硬件对过程的支持,五. 嵌套过程 例:编译一个递归C过程 ( Assume: n - $a0 )C code for n!int fact ( int n )if ( n = 1

42、, go to L1(else)addi $v0, $zero, 1 # return if n 1,2.2.6 硬件对过程的支持,addi $sp, $sp, 8 # Recover $sp (Why not recover $ra and $a0 ?)jr $ra # return to after jalL1: addi $a0, $a0, -1 # n = 1: argument gets ( n - 1 )jal fact # call fact with ( n - 1 )lw $a0, 0($sp) # return from jal: restore argument nlw

43、$ra, 4($sp) # restore the return addressaddi $sp, $sp, 8 # adjust stack pointer to pop 2 itemsmul $v0, $a0, $v0 # return n*fact ( n - 1 )jr $ra # return to the caller问题:为什么要保存$a0 和$ra ?,2.2.6 硬件对过程的支持,过程调用时,保留和不保留的内容:,2.2.6 硬件对过程的支持,相关术语:C 语言存储方式动态的( automatic)静态的(static )过程帧和帧指针( $fp ) (动态的 ) 过程帧/活

44、动记录: 栈中包含过程所保存的寄存器和局部变量的片段。 $fp:指向给定过程中保存的寄存器和局部变量的值。 全局指针( $gp )(静态的)指向静态数据区的保留寄存器,2.2.6 硬件对过程的支持,六. 在栈(Stack)中为新数据分配空间,过程调用之前、之中和之后栈的分配情况,2.2.6 硬件对过程的支持,七. 在堆(Heap)中为新数据分配空间,MIPS operands,MIPS assembly language,MIPS machine language,2.2.7 MIPS中32位立即数和寻址,一 . 32位立即数 大部分常数通常短于或等长于16位字段 少部分长于16位:通过读取立

45、即数指令lui(load upper immediate )设置寄存器中常数的高16位。 lui $t0 , 255,2.2.7 MIPS中32位立即数和寻址,例:加载32位常数The 32-bit constant:0000 0000 0011 1101 0000 1001 0000 0000 (61*164 + 2304=4000000)10MIPS code:lui $s0, 61 # 61 decimal = 0000 0000 0011 1101 binary (The value of $s0 afterward is: 0000 0000 0011 1101 0000 0000 0000 0000)ori $s0, $s0, 2304 # 2304 decimal = 0000 1001 0000 0000 binary (The value of $s0 afterward is: 0000 0000 0011 1101 0000 1001 0000 0000),2.2.7 MIPS中32位立即数和寻址,二. 分支和跳转中的寻址 跳转指令: j J型例:j 10000 # go to location 10000| 2 | 10000 |6 bits 26 bits 直接寻址:26位的地址左移两位后直接拼接PC中的高4位。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 教学课件 > 大学教育

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1