




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目前使用或曾经使用本教材国内高校目前使用或曾经使用本教材国内高校n浙江大学、武汉大学、东华理工大学、北京大学、上海交通大学、电子科技大学、吉林大学、北京师范大学、中央财经大学、华东师范大学、中国地质大学、哈尔滨工业大学、合肥工业大学、中山大学、重庆大学、太原科技大学、北京科技大学、西北工业大学等Chapter 2Chapter 2指令: 计算机的语言本章概要本章概要n计算机硬件的操作n计算机硬件的操作数n有符号和无符号数n计算机中指令的表示n逻辑操作n决策指令n计算机硬件对过程的支持n人机交互nMIPS中32位立即数和地址的寻址n并行与指令:同步n翻译并执行程序n以一个C排序程序为例n数组与指
2、针Chapter 2 Instructions: Language of the Computer 3类类别别指令指令InstructionInstruction示例示例含义含义注释注释算术加法addadd $s1,$s2,$s3 $s1=$s2 + $s3 三个寄存器操作数减法subtractsub $s1,$s2,$s3 $s1=$s2 - $s3 三个寄存器操作数立即数加法 add immediate addi $s1,$s2,20 $s1=$s2 + 20加常数类别类别指令指令InstructionInstruction示例示例含义含义注释注释取数取字load wordlw $s1,2
3、0($s2)$s1=Memory$s2+20 内存 字 寄存器取半字load half lh $s1,20($s2)$s1=Memory$s2+20 内存 半字 寄存器取无符号半字load half unsignedlhu $s1,20($s2) $s1=Memory$s2+20 内存 半字 寄存器取字节load bytelb $s1,20($s2)$s1=Memory$s2+20 内存 字节 寄存器取链接字load linked wordll $s1,20($s2)$s1=Memory$s2+20 取字作为原子交换的前半部取立即数的高位 load upper immediate lui $s
4、1,20$s1=20216取常数并放到高16位存数存字store wordsw $s1,20($s2)Memory$s2+20=$s1 寄存器 字 内存存半字store halfsh $s1,20($s2)Memory$s2+20=$s1 寄存器 半字 内存存字节store bytesb $s1,20($s2)Memory$s2+20=$s1 寄存器 字节 内存存条件字store condition word sc $s1,20($s3)Memory$s2+20=$s1$s1=0 or 1存字作为原子交换的后半部类别类别指令指令InstructionInstruction示例示例含义含义注释注
5、释逻辑与andand $s1,$s2,$s3 $s1=$s2 & $s3三个寄存器操作数按位与或oror $s1,$s2,$s3$s1=$s2 | $s3三个寄存器操作数按位或或非nornor $s1,$s2,$s3 $s1=($s2|$s3) 三个寄存器操作数按位或非立即数与 and immediateand $s1,$s2,20$s1=$s2 & 20和常数按位与立即数或 or immediateor $s1,$s2,20$s1=$s2 | 20和常数按位或逻辑左移 shift left logicalsll $s1,$s2,10 $s1=$s2 10根据常数右移相应位类别类别指令指令In
6、structionInstruction示例示例含义含义注释注释条件分支相等时跳转branch on equalbeq $s1,$s2,25if($s1=$s2) go to PC+4+100相等检测;和PC相关的跳转不相等时跳转branch on not equal bne $s1,$s2,25if($s1!=$s2) go to PC+4+100不相等检测;和PC相关的跳转小于时置位set on less thanslt $s1,$s2,$s3if($s2$s3) $s1=1 else $s1=0比较是否小于:无符号数比较小于时置位set on less than unsignedsltu
7、 $s1,$s2,$s3if($s2$s3) $s1=1 else $s1=0比较是否小于无符号数无符号数比较小于立即数时置位set less than immediateslti $s1,$s2,20if($s220) $s1=1 else $s1=0比较是否小于常数无符号数比较小于无符号立即数时置位set less than immediate unsignedsltiu $s1,$s2,20if($s220) $s1=1 else $s1=0比较是否小于无符号常数Chapter 2 Instructions: Language of the Computer 4类别类别指令指令Instr
8、uctionInstruction示例示例含义含义注释注释算术加法addadd $s1,$s2,$s3$s1=$s2 + $s3减法subtractsub $s1,$s2,$s3$s1=$s2 - $s3三个寄存器操作数立即数加法add immediateaddi $s1,$s2,20$s1=$s2 + 20加常数取数取字load wordlw $s1,20($s2)$s1=Memory$s2+20内存 字 寄存器取半字load half lh $s1,20($s2)$s1=Memory$s2+20内存 半字 寄存器取无符号半字load half unsignedlhu $s1,20($s2)
9、$s1=Memory$s2+20内存 半字 寄存器取字节load bytelb $s1,20($s2)$s1=Memory$s2+20内存 字节 寄存器取链接字load linked wordll $s1,20($s2)$s1=Memory$s2+20取字作为原子交换的前半部取立即数的高位load upper immediatelui $s1,20$s1=20216取常数并放到高16位存数存字store wordsw $s1,20($s2)Memory$s2+20=$s1寄存器 字 内存存半字store halfsh $s1,20($s2)Memory$s2+20=$s1寄存器 半字 内存存字
10、节store bytesb $s1,20($s2)Memory$s2+20=$s1寄存器 字节 内存存条件字store condition wordsc $s1,20($s3)Memory$s2+20=$s1$s1=0 or 1存字作为原子交换的后半部逻辑与andand $s1,$s2,$s3$s1=$s2 & $s3三个寄存器操作数按位与或oror $s1,$s2,$s3$s1=$s2 | $s3三个寄存器操作数按位或或非nornor $s1,$s2,$s3$s1=($s2|$s3)三个寄存器操作数按位或非立即数与and immediateand $s1,$s2,20$s1=$s2 & 20
11、和常数按位与立即数或or immediateor $s1,$s2,20$s1=$s2 | 20和常数按位或逻辑左移shift left logicalsll $s1,$s2,10 $s1=$s2 10根据常数右移相应位条件分支相等时跳转branch on equalbeq $s1,$s2,25if($s1=$s2) go to PC+4+100相等检测;和PC相关的跳转不相等时跳转branch on not equalbne $s1,$s2,25if($s1!=$s2) go to PC+4+100不相等检测;和PC相关的跳转小于时置位set on less thanslt $s1,$s2,$
12、s3if($s2$s3) $s1=1 else $s1=0比较是否小于:无符号数比较小于时置位set on less than unsignedsltu $s1,$s2,$s3if($s2$s3) $s1=1 else $s1=0比较是否小于无符号数无符号数比较小于立即数时置位set less than immediate slti $s1,$s2,20if($s220) $s1=1 else $s1=0比较是否小于常数无符号数比较小于无符号立即数时置位set less than immediate unsignedsltiu $s1,$s2,20if($s2 0000 0000 0000 0
13、010n2: 1111 1110 = 1111 1111 1111 1110Chapter 2 Instructions: Language of the Computer 25指令表示指令表示n指令用二进制编码n称为机器代码nMIPS 指令n32位指令字编码n指令格式中若干字段分别用于表示操作码, 寄存器编号, n非常规整n寄存器编号【参考教材71页图2-14】n$t0 $t7 are regs 8 15n$t8 $t9 are regs 24 25n$s0 $s7 are regs 16 232.5RepresentingInstructionsintheComputer指令格式的演变指令
14、格式的演变n肆地址指令;n三地址指令;n二地址指令;n一地址指令;n零地址指令。n地址的显式和隐含式Chapter 2 Instructions: Language of the Computer 27MIPS中寄存器指令中寄存器指令n指令字段nop: 操作码(opcode)nrs: 第一个源寄存器编号nrt: 第二个源寄存器编号nrd: 目的寄存器编号nshamt: 移位位数(00000 表示不移位) nfunct: 功能码(扩展操作码) (extends opcode)oprsrtrdshamtfunct6bits6bits5bits5bits5bits5bitsChapter 2 Ins
15、tructions: Language of the Computer 28R-型(寄存器)操作举例型(寄存器)操作举例add $t0, $s1, $s2special$s1$s2$t00add01718803200000010001100100100000000100000000000100011001001000000001000002=0232402016oprsrtrdshamtfunct6bits6bits5bits5bits5bits5bitsChapter 2 Instructions: Language of the Computer 29十六进制十六进制n基底是16n二进制串
16、的压缩表示(使用16进制的原因)n四位二进制组成一个十六进制数000004010081000c1100100015010191001d11012001060110a1010e11103001170111b1011f1111nExample:eca86420n11101100101010000110010000100000Chapter 2 Instructions: Language of the Computer 30MIPS I型(立即数指令)型(立即数指令)n立即数的算术和读数/存数指令nrt: 目的或源寄存器编号n常数的取值范围: 215 to +215 1n地址:偏移加上rs中的基址
17、n设计原则4:优秀的设计需要适宜的折中方案n不同类型指令采用不同的解码方式,但都是32位相同的指令长度n尽可能保持相似的指令格式oprsrtconstantoraddress6bits5bits5bits16bits指令格式举例指令格式举例1n如果数组A的基址放在$t1中,h存放在$s2中,这C语言写的语句:nA300=h+A300编译成汇编语言,则为:nlw $t0, 1200($t1) # $t0=A300nAdd $t0, $s2, $t0 # $t0=h+A300nSw $t0, 1200($t1) #把h+A300存到原来A300所在的单元。指令格式举例指令格式举例1-2oprsrt
18、rdAddress/shamdfunct359812000188803243981200汇编语言编写的程序汇编语言编写的程序:lw $t0, 1200($t1) Add $t0, $s2, $t0Sw $t0,1200($t1)变成机器语言变成机器语言,如下,如下:寄存器编号$t0$t7areregs815$t8$t9areregs2425$s0$s7areregs1623指令格式举例指令格式举例1-3oprsrtrdAddress/shamdfunct359812000188803243981200存在存储器中的形式为上表的存在存储器中的形式为上表的2进制进制:oprsrtrdAddress
19、/shamdfunct100011 01001010000000 0100 1011 0000000000 100100100001000 00000100000101011 01001010000000 0100 1011 0000汇编语言编写的程序汇编语言编写的程序:lw $t0, 1200($t1) Add $t0, $s2, $t0Sw $t0,1200($t1)Chapter 2 Instructions: Language of the Computer 34存储程序存储程序n指令用二进制表示,像数一样n指令和数据存储在存储器中n程序可以被其他程序操作n例如,编译,连接,n“二进制
20、兼容”可以让编译后的程序运行在不同的计算机上n标准的ISAs(软件编程的标准)The BIG PictureThe BIG PictureChapter 2 Instructions: Language of the Computer 35逻辑操作逻辑操作n对位进行处理的指令逻辑操作CJavaMIPS左移srl按位与&and, andi按位或|or, ori按位取反norn用于对字中的若干“位位” n打包和拆包的操作2.6LogicalOperationsChapter 2 Instructions: Language of the Computer 36移位操作移位操作nshamt: 移多少
21、位n逻辑左移sllslln左移空位填0n逻辑左移i位相当于乘2 2i in逻辑右移srln逻辑右移空位填0n逻辑右移i位相当于除2i(仅对无符号数)oprsrtrdshamtfunct6bits6bits5bits5bits5bits5bitsChapter 2 Instructions: Language of the Computer 37“与与”操作操作n可用于一个字中的掩码操作n选择某些位,其他位清零and $t0, $t1, $t20000000000000000000011011100000000000000000000000011110000000000$t2$t10000000
22、0000000000000110000000000$t0Chapter 2 Instructions: Language of the Computer 38“或或” 操作操作n用于把包含字中的一些位置1,其他位不变or $t0, $t1, $t20000000000000000000011011100000000000000000000000011110000000000$t2$t100000000000000000011110111000000$t0Chapter 2 Instructions: Language of the Computer 39按位按位“取反取反”操作操作n用于改变字
23、中的一些位n0变成1,1变成0nMIPS3-操作数指令NORnaNORb=NOT(aORb)“或非”nor $t0, $t1, $zero00000000000000000011110000000000$t111111111111111111100001111111111$t0Register0:alwaysreadaszeroChapter 2 Instructions: Language of the Computer 40决策指令决策指令n如果条件为真,跳转到被标签的指令执行n否则,继续执行nbeq rs, rt, L1nif (rs = rt)转到标签为L1的指令执行nbne rs,
24、rt, L1nif (rs != rt)转到标签为L1的指令执行;nj L1n无条件跳转到标签为L1的指令执行2.7InstructionsforMakingDecisionsChapter 2 Instructions: Language of the Computer 41编译编译IF语句语句nCcode:if (i=j) f = g+h; else f = g-h;nf,g,in$s0,$s1,n编译成MIPS代码: bne $s3, $s4, Else add $s0, $s1, $s2 j ExitElse: sub $s0, $s1, $s2Exit: Assemblercalcu
25、latesaddressesChapter 2 Instructions: Language of the Computer 42编译循环语句编译循环语句nC code:while (savei = k) while (savei = k) i += 1; i += 1;ni in $s3, k in $s5, address of save in $s6nCompiled MIPS code:Loop: sll $t1, $s3, 2Loop: sll $t1, $s3, 2 add $t1, $t1, $s6 add $t1, $t1, $s6 lw $t0, 0($t1) lw $t0,
26、 0($t1) bne $t0, $s5, Exit bne $t0, $s5, Exit addi $s3, $s3, 1 addi $s3, $s3, 1 j Loop j LoopExit: Exit: Chapter 2 Instructions: Language of the Computer 43基本块基本块n一个基本块是一个指令序列,其中n内部没有跳出的指令(结束指令除外)n也没有被跳转到的指令(开始指令除外)n编译器标识基本快用于优化n高级处理机能够加速基本块的执行Chapter 2 Instructions: Language of the Computer 44更多的条件
27、操作更多的条件操作n如果条件为真置1,否则置0nslt rd, rs, rt;小于则置位nif (rs rt) rd = 1; else rd = 0;nslti rt, rs, constantnif (rs constant) rt = 1; else rt = 0;nbeq,bne可以和其他指令结合使用slt $t0, $s1, $s2 # if ($s1 $s2)$t0=1;bne $t0, $zero, L # $t0 not equal to zero branch to LChapter 2 Instructions: Language of the Computer 45分支指
28、令设计分支指令设计n为什么没有blt,bge等指令?n硬件执行, , 比=, 慢n指令中结合分支指令包含更多工作,需要更慢的时钟n所有指令都受到了影响nBeq和bne是较常用的n这是一个很好的设计折中方案Chapter 2 Instructions: Language of the Computer 46有符号有符号数和数和无符号数无符号数对比对比n有符号数比较: slt, sltin无符号数比较: sltu, sltuin举例n$s0 = 1111 1111 1111 1111 1111 1111 1111 1111n$s1 = 0000 0000 0000 0000 0000 0000 0
29、000 0001nslt $t0, $s0, $s1 # signedn1 +1 $t0 = 0Chapter 2 Instructions: Language of the Computer 47过程调用过程调用n遵循步骤1. 将参数放在过程可以访问的寄存器里2. 将控制转移给过程3. 获得过程所需要的存储资源4. 执行过程的操作(请求的任务)5. 将结果的值放在调用程序可以访问到的寄存器6. 将控制返回到调用点2.8SupportingProceduresinComputerHardwareChapter 2 Instructions: Language of the Computer 4
30、8寄存器的使用寄存器的使用n$a0 $a3: 传递参数 (regs 4 7)n$v0, $v1: 返回结果值 (regs 2 and 3)n$t0 $t9: 临时寄存器n可以被调用者改写n$s0 $s7: 保存参数n必须被调用者保存和恢复n$gp: 静态数据的全局指针寄存器(reg 28)nglobal pointer for static data (reg 28)n$sp: 堆栈指针寄存器stack pointer (reg 29)n$fp: 帧指针寄存器(frame pointer) ,n 保存过程帧的第一个字 (reg 30)n$ra:返回地址寄存器 return address (r
31、eg 31)Chapter 2 Instructions: Language of the Computer 49过程调用指令过程调用指令n过程调用:跳转和链接jal ProcedureLabeln下一条指令的地址在寄存器$ra中n跳转到目标地址n过程返回:寄存器跳转 jump registerjr $ran拷贝$ra到程序计数器n也被用于运算后跳转n例如用于case/switcg分支语句e.gChapter 2 Instructions: Language of the Computer 50不调用其他过程(叶过程)例子不调用其他过程(叶过程)例子nC code:int leaf_examp
32、le (int g, h, i, j) int f; f = (g + h) - (i + j); return f;n参数 g, , j 在 $a0, , $a3中nf 在 $s0 (因此,需要存储$s0到堆栈)n结果在$v0Chapter 2 Instructions: Language of the Computer 51不调用其他过程的例子不调用其他过程的例子nMIPScode:leaf_example: addi $sp, $sp, -4 sw $s0, 0($sp) add $t0, $a0, $a1 add $t1, $a2, $a3 sub $s0, $t0, $t1 add
33、$v0, $s0, $zero lw $s0, 0($sp) addi $sp, $sp, 4 jr $ra存储 $s0 到堆栈i+j-t1 过程体(g+h)-(i+j)恢复 $s0结果 (s0-v0)返回参数g,j在$a0,$a3中;f在$s0(因此,需要存储$s0到堆栈);结果在$v0g+h-t0Chapter 2 Instructions: Language of the Computer 52嵌套过程嵌套过程非叶过程非叶过程( (Non-LeafNon-Leaf Procedures) Procedures)n过程调用其他过程n对于嵌套调用,调用者需要存储到堆栈的信息:n它的返回地址n
34、调用后还需要用的任何参数寄存器和临时寄存器n调用后返回,寄存器会从堆栈中恢复Chapter 2 Instructions: Language of the Computer 53嵌套过程举例嵌套过程举例 Non-Leaf Procedure ExampleNon-Leaf Procedure ExamplenCcode:int fact (int n) if (n 1) return f; else return n * fact(n - 1);n参数n放在 $a0n结果放在 $v0Chapter 2 Instructions: Language of the Computer 54嵌套过程举
35、例嵌套过程举例 Non-LeafNon-Leaf Procedure Example Procedure ExamplenMIPScode:fact: addi $sp, $sp, -8 # adjust stack for 2 items sw $ra, 4($sp) # save return address sw $a0, 0($sp) # save argument(存参数) slti $t0, $a0, 1 # test for n 1 beq $t0, $zero, L1 addi $v0, $zero, 1 # if so, result is 1 addi $sp, $sp,
36、8 # pop 2 items from stack jr $ra # and returnL1: addi $a0, $a0, -1 # else decrement n jal fact # recursive call(递归调用) lw $a0, 0($sp) # restore original n lw $ra, 4($sp) # and return address addi $sp, $sp, 8 # pop 2 items from stack mul $v0, $a0, $v0 # multiply to get result jr $ra # and returnChapt
37、er 2 Instructions: Language of the Computer 55堆栈中的局部数据堆栈中的局部数据 Local Data on the StackLocal Data on the Stackn局部数据有调用者分配ne.g., C 自动分配变量n过程帧(活动记录)n被一些编译器使用控制堆栈存储Chapter 2 Instructions: Language of the Computer 56内存布局内存布局Memory Layoutn正文:程序代码n静态数据:全局变量ne.g., C语言静态变量,常数数组和字符串n$gp 初始化地址,允许段内的 偏移n动态数据:堆n
38、堆栈:自动存储Chapter 2 Instructions: Language of the Computer 57字符数据字符数据 (包括汉字)(包括汉字)n字节编码的字符集nASCII: 128 个n95 graphic, 33 controlnLatin-1: 256 个nASCII, +96 more graphic charactersnUnicode: 32位字符集nUsed in Java, C+ wide characters, n宽字符世界上大多数字母表nUTF-8, UTF-16: 可变长度编码2.9CommunicatingwithPeopleChapter 2 Inst
39、ructions: Language of the Computer 58字节字节/ /半字操作半字操作 Byte/Halfword OperationsByte/Halfword Operationsn使用位操作nMIPS字节/半字 读取/存储 n字符串处理是较常用的方式lb rt, offset(rs) lh rt, offset(rs)nSign extend to 32 bits in rtlbu rt, offset(rs) lhu rt, offset(rs)nZero extend to 32 bits in rtsb rt, offset(rs) sh rt, offset(r
40、s)n存储恰恰是字节或半子的形式Chapter 2 Instructions: Language of the Computer 59字符串拷贝举例字符串拷贝举例 String Copy ExampleString Copy ExamplenC code (nave):n非终止字符串Null-terminated stringvoid strcpy (char x, char y) int i; i = 0; while (xi=yi)!=0) i += 1; n假定x, y 基地址在 $a0, $a1中;ni 在 $s0 中。Chapter 2 Instructions: Language
41、of the Computer 60字符串拷贝字符串拷贝String Copy ExamplenMIPScode:strcpy: addi $sp, $sp, -4 # 为保存i调整堆栈指针, sw $s0, 0($sp) # 把i送栈中【i在 $s0 中】 add $s0, $zero, $zero # 将i置“0”, 【i = 0+0】 L1: add $t1, $s0, $a1 # addr of yi in $t1 lbu $t2, 0($t1) # $t2 = yi add $t3, $s0, $a0 # addr of xi in $t3 sb $t2, 0($t3) # xi =
42、 yi beq $t2, $zero, L2 # exit loop if yi = 0 addi $s0, $s0, 1 # i = i + 1 j L1 # next iteration of loopL2: lw $s0, 0($sp) # restore saved $s0 addi $sp, $sp, 4 # pop 1 item from stack jr $ra # and return假定x,y基地址在$a0,$a1中,i在$s0中Chapter 2 Instructions: Language of the Computer 6100000000001111010000000
43、00000000032位常数位常数 32-bit Constantsn大部分常数都比较小,16位表示立即数足够了,偶尔使用32位常数。nlui rt, constantn取立即数并放到高16位lui $s0, 6100000000011111010000100100000000ori $s0, $s0, 23042.10MIPSAddressingfor32-BitImmediatesandAddressesOri立即数或,$s0与常数2304“或”,结果放在$s0形成一个32位的常数Chapter 2 Instructions: Language of the Computer 62分支地址
44、分支地址 Branch Addressingn分支指令说明n操作吗,两个寄存器,两个地址n大多数跳转目标离跳出的位置较近n向前或向后oprsrtconstantoraddress6bits5bits5bits16bitsnPC相对寻址n目标地址 = PC + offset 4n此时PC的增加量是4的倍数PC 作为增加地址的寄存器原因作为增加地址的寄存器原因Chapter 2 Instructions: Language of the Computer 63Chapter 2 Instructions: Language of the Computer 64跳转地址跳转地址Jump Addres
45、singn跳转(j和jal)的目标地址可以在代码段的任何位置n指令除op外,指令其它字段都是地址opaddress6bits26bitsn直接跳转到地址nTargetaddress=PC3128:(address4)28位4位Chapter 2 Instructions: Language of the Computer 65目标地址目标地址 Target Addressing Examplen早期例子的循环代码n设循环的起始地址是8000Loop: sll $t1, $s3, 2800000019920 add $t1, $t1, $s68000409229032 lw $t0, 0($t1
46、)8000835980 bne $t0, $s5, Exit8001258212 addi $s3, $s3, 180016819191 j Loop80020220000Exit: 80024Chapter 2 Instructions: Language of the Computer 66远程分支远程分支Branching Far Awayn如果跳转对象地址太大无法用16位的偏移表示,汇编将重写代码n【把短跳转(216 范围)n 变成长跳转(2 22626 范围)】nExamplebeq $s0,$s1, L1bne $s0,$s1, L2j L1L2: 常用的寻址方式常用的寻址方式n寄
47、存器型:直接、间接;n存储器型:直接、间接;n计算型:相对、基址、变址;n立即数型;Chapter 2 Instructions: Language of the Computer 68地址模式总结地址模式总结 Addressing Mode SummaryAddressing Mode SummaryChapter 2 Instructions: Language of the Computer 692.11并行与指令:同步并行与指令:同步n处理器共享存储器同一区域nP1 写, P2 读n(任务1写的结果是任务2要读取得值)n如果P1和P2不同步,将发生数据竞争n结果由访问次序决定n依赖硬件
48、提供同步指令n(例如:lock和unlock指令,控制一个“互斥区”)n多核处理器的情况下:n任务1 Sw $t0,0($s0)n任务2 Lw $t1,0($s0)n此时,任务2和任务1必须同步,否则,无法判断$t1中读取的是$t0,还是0($s0)单元以前的数值。2.11ParallelismandInstructions:SynchronizationChapter 2 Instructions: Language of the Computer 702.11并行与指令:同步并行与指令:同步n原子读原子读/ /写内存操作写内存操作n在读和写之间,不再允许对该空间的其他操作n可以是单一的指令
49、n例如寄存器和内存之间的原子交换n或者指令的原子配对2.11ParallelismandInstructions:SynchronizationChapter 2 Instructions: Language of the Computer 71MIPS中的同步中的同步Synchronization in MIPS n链接取数(Load linked) nll rt, offset(rs)n条件存数(Store conditional) nsc rt, offset(rs)n如果ll指令没改变该地址内容则成功,rt返回1;n如果被改变了,则失败,rt返回0;n例如:atomic swap (检
50、测和设置锁变量)try: add $t0,$zero,$s4 ;copy exchange value ll $t1,0($s1) ;load linked sc $t0,0($s1) ;store conditional beq $t0,$zero,try ;branch store fails add $s4,$zero,$t1 ;put load value in $s4Chapter 2 Instructions: Language of the Computer 72编译并执行程序编译并执行程序 Translation and StartupTranslation and Start
51、up许多编译器直接产生目标模块静态链接2.12TranslatingandStartingaProgramChapter 2 Instructions: Language of the Computer 73汇编伪指令汇编伪指令 Assembler Pseudo InstructionsAssembler Pseudo Instructionsn大多数汇编指令和机器指令是一对一的n特殊的是伪指令n伪指令:汇编指令的变种nmove $t0, $t1move $t0, $t1add $t0, $zero, $t1blt $t0, $t1, Lblt $t0, $t1, Lslt $at, $t0,
52、 $t1bne $at, $zero, Ln$at (register 1): 汇编程序的临时寄存器(使用汇编语言时候的硬件额外的开销)Chapter 2 Instructions: Language of the Computer 74生成目标模块生成目标模块Producing an Object ModuleProducing an Object Modulen汇编器(或编译器)把程序翻译成机器语言n提供从部分构建完整程序的信息n目标文件头:描述目标文件其他部分的大小和位置n正文段:翻译后的指令,包含机器语言代码n静态数据段:包含在程序生命周期内分配的数据n重定位信息,标记了一些程序加载进
53、内存时依赖于绝对地址的指令和数据n符号表,全局定义和外部引用n调试信息:用于关联源文件Chapter 2 Instructions: Language of the Computer 75链接目标模块链接目标模块 Linking Object Modulesn产生一个可执行的映像1. 合并段(代码和数据数据库象征性放入内存)2. 决定数据和指令标签的地址3. 修补引用(内部和外部引用)n可以留下依靠重定位程序修复的部分n但虚拟内存,不需要做这些n虚拟内存空间,程序必须以绝对地址装入Chapter 2 Instructions: Language of the Computer 76加载程序加载
54、程序Loading a Programn把待执行的程序从硬盘的镜像文件读入内存1. 读取可执行文件头来确定正文段和数据段的大小2. 为正文和数据创建一个足够大的地址空间3. 把指令和初始数据拷贝到内存或者设置页表项,使它们可用4. 把主程序的参数复制到栈顶5. 初始化寄存器(包括堆栈指针$sp, 帧指针$fp, 全局指针$gp )6. 跳转到启动进程n复制参数到寄存器并调用主函数mainn主函数返回时,通过系统调用exit终止程序Chapter 2 Instructions: Language of the Computer 77动态链接库动态链接库Dynamic LinkingDynamic
55、 Linkingn调用时,只是连接或装入库文件n过程代码重定位;n避免所有程序中出现的链接库;但是这些库的信息是一次性代入内存,占用内存空间。只是在用到的时候才链接该库;n自动装入最新的编译器中的版本的动态库。Chapter 2 Instructions: Language of the Computer 78晚过程连接晚过程连接 Lazy Linkage(只是在用到的时候才链接该库只是在用到的时候才链接该库)IndirectiontableStub:LoadsroutineID,Jumptolinker/loaderLinker/loadercodeDynamicallymappedcode
56、Chapter 2 Instructions: Language of the Computer 79启动一个启动一个Java程序程序 Starting Java ApplicationsSimpleportableinstructionsetfortheJVMInterpretsbytecodesCompilesbytecodesof“hot”methodsintonativecodeforhostmachineChapter 2 Instructions: Language of the Computer 80C Sort Examplen使用汇编指令的冒泡排序n(交换内存中两个位置所存的
57、值)nSwapprocedure(leaf)void swap(int v, int k) int temp; temp = vk; vk = vk+1; vk+1 = temp;nvin$a0,kin$a1,tempin$t02.13ACSortExampletoPutItAllTogetherChapter 2 Instructions: Language of the Computer 81SwapSwap过程过程 The Procedure SwapThe Procedure Swapswap: sll $t1, $a1, 2 # $t1 = k * 4 (按照字节编址) add $t
58、1, $a0, $t1 # $t1 = v+(k*4) # (address of vk) lw $t0, 0($t1) # $t0 (temp) = vk lw $t2, 4($t1) # $t2 = vk+1 sw $t2, 0($t1) # vk = $t2 (vk+1) sw $t0, 4($t1) # vk+1 = $t0 (temp) jr $ra # return to calling routineC代码(按照字编址)MIPS代码(按照字节编址)1、为程序变量分配寄存器;【vin$a0,kin$a1,tempin$t0】2、为过程体生成汇编代码;3、保存过程调用间的寄存器(本例
59、中没有用到,因为本例是一个叶过程);Chapter 2 Instructions: Language of the Computer 82编译优化的影响编译优化的影响 Effect of Compiler OptimizationEffect of Compiler Optimization1、编译时间2、指令数;3、时钟周期4、CPI5、算法执行时间是准确衡量程序性能的唯一标准Chapter 2 Instructions: Language of the Computer 83经验教训经验教训 Lessons Learntn单独的指令数或CPI不能很好的描述性能n编译器优化对算法敏感n对比J
60、ava虚拟机解释Java/JIT编译代码已经足够快了n某些情况要对编译完C进行优化n没什么能修复一个垃圾算法Chapter 2 Instructions: Language of the Computer 84数组和指针数组和指针【简单介绍简单介绍】n数组下标计算包括n下标乘以元素长度n加上数组基址n指针直接对应内存n能避免下标计算的麻烦2.14ArraysversusPointersChapter 2 Instructions: Language of the Computer 85例子:数组和指针实现例子:数组和指针实现Clearing Example: Clearing and Arra
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度智能穿戴设备研发人员个人劳动合同书
- 2025年度股权抵押消费金融合同
- 二零二五年度同居关系终止合同书
- 二零二五年度瑜伽教练就业保障聘用合同
- 2025年度村委会林地承包与林业科研合作合同
- 浙江国企招聘2024台州市椒江区社会事业发展集团有限公司招聘3人笔试参考题库附带答案详解
- 2025青海省投招聘59人查笔试参考题库附带答案详解
- 《临床试验的监查》课件
- 电梯构造知识培训课件
- 教育测量与评价知到智慧树章节测试课后答案2024年秋石河子大学
- 2025年山西经贸职业学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 2024年09月江苏2024年苏州金融租赁校园招考笔试历年参考题库附带答案详解
- 2025年北方联合电力有限责任公司招聘笔试参考题库含答案解析
- 2025年八省联考数学试题(原卷版)
- 高教社马工程伦理学(第二版)教学课件02
- 《榜样9》观后感心得体会二
- 广西柳州市2025届高三第二次模拟考试政治试题含答案
- 《宏观经济管理研究》课件
- 凤凰卫视中文台节目表
- 2025届广东省佛山一中、石门中学高考数学考前最后一卷预测卷含解析
- 小学生播音主持课课件
评论
0/150
提交评论