第二章计算机的语言

《第二章计算机的语言》由会员分享,可在线阅读,更多相关《第二章计算机的语言(114页珍藏版)》请在文档大全上搜索。
1、Chapter 2Chapter 2指令: 计算机的语言Chapter 2 Instructions: Language of the Computer 2指令集指令集n一台计算机的全部指令n不同计算机有不同的指令集n但有许多共同的方面n早期计算机有很简单的指令集n实现简单n许多现代计算机也有简单指令集n例如:ARM系列计算机(RSIC)2.1 IntroductionChapter 2 Instructions: Language of the Computer 3MIPS指令集指令集n用于编写书中的例子使用的是MIPS语言n斯坦福大学的MIPS来自MIPS公司 ()n在嵌入式处理机市场中占
2、有很大的份额n广泛地应用在家用电器、网络/存储设备,照相机,打印机n许多现代指令集的代表n参见MIPS参考数据卡和附录B和E。Chapter 2 Instructions: Language of the Computer 4算术运算操作算术运算操作n加法和减法,都是三操作数n两个源操作数,一个目的操作数add a, b, c # a = b + cn注释用#开头n所有的算术运算都是这样的形式n设计原则一:简单源于规整规整n规整使实现简单n简单能获得低成本高性能2.2 Operations of the Computer HardwareChapter 2 Instructions: Lang
3、uage of the Computer 5算术操作例子算术操作例子nC 语言的语句:f = (g + h) - (i + j);n编译成MIPS代码:add t0, g, h #临时变量临时变量t0 = g + hadd t1, i, j #临时变量临时变量t1 = i + jsub f, t0, t1 # f = t0 - t1Chapter 2 Instructions: Language of the Computer 6寄存器操作数寄存器操作数n算术运算指令使用寄存器操作nMIPS有32个32位 寄存器n用于存储频繁使用的数据n编号0 到31n32位数码称为一个字n编译时名称的约定n
4、$t0, $t1, , $t9 表示临时寄存器临时寄存器n$s0, $s1, , $s7 用于存储变量n设计原则二:越少越快越少越快n对照主存:数以百万计的存储位置2.3 Operands of the Computer HardwareChapter 2 Instructions: Language of the Computer 7寄存器操作数举例寄存器操作数举例nC 语言编写的代码:f = (g + h) - (i + j);nf, , j in $s0, , $s4n编译成MIPS代码:add $t0, $s1, $s2add $t1, $s3, $s4sub $s0, $t0, $t
5、1Chapter 2 Instructions: Language of the Computer 8存储器操作数存储器操作数n主存可以存储复杂数据n数组,结构,动态数据n使用算术运算操作数n从主存把数读入到寄存器n把结果从寄存器存储到主存n存储器按字节编址n每个地址表示一个8位字节n按字存放在内存n每个地址必须是4个字节nMIPS按大端编址n高位存放在低地址n对照小端模式:低位放到低地址地址偏移大端模式小端模式0 x0012(OP0)34(OP1)0 x0134(OP1)12(OP0)如果将一个16位的整数0 x1234存放到一个短整型变量(short)中。这个短整型变量在内存中的存储在大小
6、端模式由下表所示。Chapter 2 Instructions: Language of the Computer 9存储器操作数举例存储器操作数举例1nC code:g = h + A8;ng 在 $s1, h 在 $s2, A的基址在 $s3n编译成MIPS代码:n小标8(数组第8个分量)需要32的偏移n每个字对应4个字节lw $t0, 32($s3) # load wordadd $s1, $s2, $t0偏移量offset基址寄存器Base register Chapter 2 Instructions: Language of the Computer 10存储器操作数举例存储器操作
7、数举例2nC code:A12 = h + A8;nh in $s2, base address of A in $s3nCompiled MIPS code:nIndex 8 requires offset of 32lw $t0, 32($s3) # load wordadd $t0, $s2, $t0sw $t0, 48($s3) # store wordChapter 2 Instructions: Language of the Computer 11寄存器和主存储器寄存器和主存储器n寄存器的访问速度比主存快得多n对主存储器数据的操作要用n取数指令lw (load word)n存数指
8、令sw (store word)。n需要执行更多的指令n编译器必须尽量使用寄存器访问变量必须尽量使用寄存器访问变量n仅当寄存器不够用时才把不经常使用的变量放到内存;n寄存器的高效利用对系统优化非常重要。Chapter 2 Instructions: Language of the Computer 12常数或立即数操作数常数或立即数操作数n指令中使用常数addi $s3, $s3, 4(immediate)n没有减去立即数的减法指令n可以使用负常数,即“加负数”实现减法addi $s2, $s1, -1n设计规则三:加速执行常用操作n小常数操作出现的频率高n立即数操作不用到内存取数Chapte
9、r 2 Instructions: Language of the Computer 13常数零常数零nMIPS寄存器0($zero)表示常数0n不能被改写n在常用的操作中,很有用n例如,可在寄存器之间传送数据add $t2, $s1, $zero常用的寻址方式常用的寻址方式n寄存器型:直接、间接;n存储器型:直接、间接;n计算型:相对、基址、变址;n立即数型;Chapter 2 Instructions: Language of the Computer 15二进制无符号整数二进制无符号整数n给定一个n位数00112n2n1n1n2x2x2x2xxn范围: 0 to +2n 1n举例n000
10、0 0000 0000 0000 0000 0000 0000 10112= 0 + + 123 + 022 +121 +120= 0 + + 8 + 0 + 2 + 1 = 1110n32位数n0 to +4,294,967,2952.4 Signed and Unsigned NumbersChapter 2 Instructions: Language of the Computer 16二进制补码表示有符号整数二进制补码表示有符号整数nx是一个n位数00112n2n1n1n2x2x2x2xxn范围: 2n 1 to +2n 1 1n举例n1111 1111 1111 1111 1111
11、 1111 1111 11002= 1231 + 1230 + + 122 +021 +020= 2,147,483,648 + 2,147,483,644 = 410n32位数n2,147,483,648 to +2,147,483,647Chapter 2 Instructions: Language of the Computer 17二进制补码表示有符号整数二进制补码表示有符号整数n31位是符号位n1表示负数n0表示非负n(2n 1) 不能表示n非负数的无符号数和二进制补码是相同的n一些特殊的数n 0: 0000 0000 0000n1: 1111 1111 1111n绝对值最大负数: