- 1、本文档共26页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
02MachineStru
CS61C L221 Performance ? UC Regents 复习 MIPS汇编语言中: 寄存器=变量 一行一条指令 (简单操作) Simpler is Better, Smaller is Faster 新指令New Instructions: add, addi, sub 新寄存器: C 变量: $s0 - $s7 临时变量(temporary): $t0 - $t7 Zero: $zero 课堂小测验 在C语言中变量类型通过声明来指定,而在MIPS汇编语言中变量类型由指令(操作符)指定. 由于仅有8个局部变量($s) 和8个临时($t) 变量, 因此对于多于16个变量的C表达式,我们无法转换为MIPS汇编语言. 如果p(存储在$s0中) 是指向int数组的指令, 则p++; 可翻译成 addi $s0 $s0 1 立即数(Immediates) 立即数:数值常数 代码中经常出现,因此有专门的指令. 加立即数指令(Add Immediate): addi $s0,$s1,10 (in MIPS) f = g + 10 (in C) 这里MIPS寄存器 $s0,$s1对应于C变量f,g 语法和add指令类似 区别:最后一个参数是数,而不是寄存器 register 减立即数指令(Sub Immediate)? 立即数(Immediates) 没有减立即数!Why? 要让最少量的指令来实现功能 如果指令可以分解(或者减化)为更简化的形式,就略去该指令 subi …, X = addi …, -X = so no subi addi $s0,$s1,-10 (in MIPS) f = g - 10 (in C) 这里MIPS寄存器$s0,$s1对应于C变量f,g 汇编操作数: 内存(Memory) C变量映射到寄存器,但寄存器有限 超过32个元素的数组怎么办? 一般把这种数据结构放在内存memory中 MIPS算术指令仅能对寄存器操作,不能直接操作内存. 数据传送指令 在寄存器和内存之间传送数据: 内存到寄存器 寄存器到内存 透析: 任何计算机的5个组成部分 数据传送: Memory to Reg (1/4) 传送一个字的数据, 需要指定两件事情: 寄存器: 通过寄存器号码 ($0 - $31)或者符号名 ($s0,…, $t0, …)来指定 内存地址: 更难一些 把内存看成一维数据, 这样就能通过简单的提供一个指向内存的指针来访问. 另外, 还希望能由访问附近的数据(通过偏移量offset). Remember: “Load FROM memory” Data Transfer: Memory to Reg (2/4) 指定内存地址: 寄存器:包含指向内存的指针 数值偏移量offset (以字节为单位) 内存地址为这两个值的和 例: 8($t0) 内存地址为:$t0的值+8(字节) Data Transfer: Memory to Reg (3/4) Load 指令语法(Instruction Syntax): 1 2,3(4) where 1) 指令名字(operation name) 2) 接收值的寄存器(register that will receive value) 3) 数值偏移量(单位:字节)numerical offset in bytes 4) 包含指向内存指针的寄存器(register containing pointer to memory) MIPS 指令名字(Instruction Name): lw (意即Load Word, 故每次装入32位即一个字) Data Transfer: Memory to Reg (4/4) 例: lw $t0,12($s0) 该指令取出$s0中的指针, 加上12, 然后从计算的和所指的位置的内存中取得值,放到$t0中 Notes: $s0 称为 基寄存器base register 12 称为 偏移offset 偏移通常用于访问结构体或数组的元素: 基寄存器指向结构体或数组的起始位置(注意偏移量必须是常数 (即在编译时已知)). 数据传送: Reg to Memory 希望把寄存器的值存储(Store)到内存中 语法:和Load类似 MIPS指令名字: sw (即Store Word, 每次存储32位或一个字) 例: sw $t0,12($s0) 该指令将$s0中的指针加上12,得到内存地址,然后把寄存器$t0中的值存储到该内存地址中 Remember: “Store INTO memory” Pointers v. Values 重要概念: 寄存器可以保存任意32-位数值. 该值可以是 (sig
文档评论(0)