微机原理(计算机原理与接口技术)

Similar documents
L15 MIPS Assembly

PowerPoint Presentation

7 Q&A 11 2

L15 MIPS Assembly

Microsoft PowerPoint - chx03_org08_Mul&shift

第5章:汇编语言程序设计

(1) (2) (3) 1. (1) 2

Principles of Computers

国家高技术研究发展计划课题(八六三计划)

银河银联系列证券投资基金

1 CPU

Microsoft PowerPoint - 微原-第3章3.ppt [兼容模式]

MSP430ϵÁе¥Æ¬»úµÄÖ¸Áîϵͳ.pps [¼æÈÝģʽ]

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63>

<4D F736F F D20CAB5D1E BACDBBE3B1E0D3EFD1D4B5C4BBECBACFB1E0B3CCCAB5D1E92E646F63>

72075(BOC A Share)_入cover同back cover.indb

CC213

Microsoft Word - 08 单元一儿童文学理论

第三章

nb.PDF

bnbqw.PDF

1. 本文首段的主要作用是 A. 指出 異蛇 的藥用功效 說明 永之人爭奔走焉 的原因 B. 突出 異蛇 的毒性 為下文 幾死者數矣 作鋪墊 C. 交代以蛇賦稅的背景 引起下文蔣氏有關捕蛇的敘述 2. 本文首段從三方面突出蛇的 異 下列哪一項不屬其中之一 A. 顏色之異 B. 動作之異 C. 毒性之

untitled

項 訴 求 在 考 慮 到 整 體 的 財 政 承 擔 以 及 資 源 分 配 的 公 平 性 下, 政 府 採 取 了 較 簡 單 直 接 的 一 次 性 減 稅 和 增 加 免 稅 額 方 式, 以 回 應 中 產 家 庭 的 不 同 訴 求 ( 三 ) 取 消 外 傭 徵 費 6. 行 政 長

(f) (g) (h) (ii) (iii) (a) (b) (c) (d) 208

Microsoft Word - 發布版---規範_全文_.doc

概 述 随 着 中 国 高 等 教 育 数 量 扩 张 目 标 的 逐 步 实 现, 提 高 教 育 质 量 的 重 要 性 日 益 凸 显 发 布 高 校 毕 业 生 就 业 质 量 年 度 报 告, 是 高 等 学 校 建 立 健 全 就 业 状 况 反 馈 机 制 引 导 高 校 优 化 招

鱼类丰产养殖技术(二).doc

疾病诊治实务(一)

名人养生.doc

<4D F736F F D2040B9C5B871A661B0CFABC8AE61C2A7AB55ACE3A8735FA7F5ABD8BFB3B9C5B871A661B0CFABC8AE61C2A7AB55ACE3A8732E646F63>


中老年保健必读(十).doc

27 i

% % ,542 12,336 14,53 16,165 18,934 22,698 25, ,557 7,48 8,877 11, 13,732 17,283 22,

海淀区、房山区(四)

穨ecr1_c.PDF

穨2005_-c.PDF

北京理工大学.doc

尲㐵.⸮⸮⸮⸮⸮

东城区(下)

果树高产栽培技术(一).doc

物质结构_二_.doc

第一節 研究動機與目的

i

水力发电(九)

中国古代文学家(八).doc

景观植物(一)

Microsoft Word - 目录.doc

园林植物卷(三).doc

19q indd

厨房小知识_一_

中南财经大学(七).doc


赵飞燕外传、四美艳史演义

厨房小知识(五)

最新监察执法全书(十八).doc

园林植物卷(十二).doc

华东师范大学.doc

國立中山大學學位論文典藏

乳业竞争_一_

最新执法工作手册(十).doc

untitled

最新执法工作手册(十六)

中国政法大学(六).doc

胎儿健康成长.doc

Microsoft Word - edu-re~1.doc

南華大學數位論文

Microsoft Word 一年級散文教案.doc

米食天地教案

第32回独立行政法人評価委員会日本貿易保険部会 資料1-1 平成22年度財務諸表等

前 言 随 着 中 国 高 等 教 育 数 量 扩 张 目 标 的 逐 步 实 现, 提 高 教 育 质 量 的 重 要 性 日 益 凸 显 发 布 高 校 毕 业 生 就 业 质 量 年 度 报 告, 是 高 等 学 校 建 立 健 全 就 业 状 况 反 馈 机 制 引 导 高 校 优 化 招

Microsoft PowerPoint sun-arm isa2.ppt [Compatibility Mode]


南華大學數位論文

untitled

香 港 舞 蹈 總 會    北 京 舞 蹈 學 院

RISC-V 相关技术文档 1 RV32I 基本整数指令集 1.1 基本整数子集的程序员模型有 31 个通用寄存器 x1~x31, 它们保存了整数数值 寄存器 x0 是硬件连线的常数 0 没有硬件连线的子程序返回地址连接寄存器, 但是在一个过程调用中, 标准软件调用约定使用寄存器 x1 来保存返回地

( 二 ) 拓 展 岗 位 ( 群 ) 1. 餐 厅 服 务 岗 位 群 在 大 中 型 餐 饮 企 业 星 级 饭 店 主 要 从 事 餐 饮 服 务 的 有 关 工 作, 如 服 务 员 点 菜 师 茶 艺 师 咖 啡 师 调 酒 师 等 2. 食 品 加 工 岗 位 群 主 要 从 事 餐 饮

(1) (2) (3) , ,3003,

(1) C

Microsoft PowerPoint - Ch3-8086CPUæ„⁄令系ç»�(3)-æŁ°æ“®ä¼€é•†æ„⁄令

国家高技术研究发展计划课题(八六三计划)


M8Rxxx 指令集说明 Version 年 11 月 上海磐芯电子有限公司 SHANGHAI MASSES ELECTRONIC Co., Ltd. 本公司保留对产品在可靠性, 功能和设计方面的改进作进一步说明的权利 说明文档的更改, 恕不另行通知

第五章 重叠、流水和现代处理器技术

主要内容 指令系统的一般概念 指令操作方式操作码的含义指令对操作数的要求指令执行的结果 寻址方式 指令说明 2015 年 3 月 16 日星期一 8 时 2 分 37 秒 2

马太亨利完整圣经注释—雅歌

二零零六年一月二十三日會議

(Microsoft Word \256\325\260\310\267|\304\263\254\366\277\375.doc)

微机第02章1(指令寻址)

CH559指令周期.doc

(i) (ii) (iii) (iv) 380,000 [ ] , , % % % 5.5% 6.5%

厨房小知识(四)

妇女更年期保健.doc

小儿传染病防治(上)

<4D F736F F D B875B9B5A448ADFBBADEB27AA740B77EA4E2A5555FA95EAED6A641ADD75F2E646F63>

女性青春期保健(下).doc

避孕知识(下).doc

孕妇饮食调养(下).doc

Transcription:

微机原理 ( 计算机原理 ) 第 10 讲 MIPS 体系结构与编程 1

第 10 讲 MIPS 体系结构与编程 MIPS 体系结构概述 MIPS 指令集简介 MIPS 汇编语言程序设计 2

MIPS 体系结构概述 MIPS 诞生于 1980 年代, 是最早的 RISC 处理器之一, 也是目前销量最好的 RISC 处理器之一, 从游戏机到路由器, 再到 SGI 的超级计算机, 都可以看到 MIPS CPU 的应用 MIPS 起源于 Stanford 大学 John Hennessy 教授的研究成果 Hennessy 于 1984 年在硅谷创立了 MIPS 公司 (www.mips.com) John L. Hennessy 出版了两本著名的教科书 : Computer Organization and Design : The Hardware/Software Interface( 计算机组成与设计 : 硬件 / 软件接口 ) Computer Architecture : A Quantitative Approach( 计算机体系结构 : 量化方法 ) 3

MIPS 体系结构概述 MIPS=Microprocessor without Interlocked Pipeline Stages, 无互锁流水级的微处理器 MIPS 的另一个含义是每秒百万条指令 Millions of instructions per second 4

MIPS 体系结构概述 MIPS 体系结构经历了以下几代 MIPS I 该指令集用于最初的 32 位处理器, 至今仍然很流行, R2000 R3000 都是 MIPS I 的实现 MIPS II MIPS I 的升级, 最初为 R6000 定义, 失败 MIPS III 应用于 R4000 的 64 位指令集 MIPS IV MIPS III 的升级, 应用于 R5000 和 R10000 5

MIPS 体系结构概述 MIPS 指令集的特点 所有指令都是 32 位的 算术 / 逻辑运算指令为 3 操作数指令格式, 两个源操作数和一个目标操作数只能是寄存器操作数 32 个通用寄存器 寄存器 0($0) 总是返回 0 无条件码 6

MIPS 体系结构概述 内存寻址对内存的访问只能通过装入 (load) 和存储 (store) 指令进行 算术 / 逻辑运算指令不能直接访问内存只有一种寻址方式 : 基址寄存器 +16 位有符号偏移量 数据在内存中存储时必须按边界对齐 7

MIPS 体系结构概述 MIPS 不支持的特征不能对字节或半字进行算术 / 逻辑运算指令没有专门的堆桟支持最小子程序支持 子程序调用通过 跳转与链接指令 进行, 将返回地址保存在一个寄存器中 ($31) 将返回地址保存在寄存器中不如保存在堆栈中灵活最小中断 异常支持 : 中断发生时, 处理器只负责跳到预定义的地址处, 其余所有操作都由软件完成 8

MIPS 体系结构概述 寄存器 32 个通用寄存器可供编程使用 :$0~$31, 其中 $0 无论写入什么永远返回 0 $31 被子程序调用指令 ( 跳转与链接指令 ) 用来保存返回地址 除此以外, 所有寄存器都可以在任何指令中以相同方式使用 真正通用 9

MIPS 体系结构概述 通用寄存器的习惯用法和命名 寄存器编号助记符用法 0 zero 永远为 0 1 at 用做汇编器的暂时变量 2-3 v0, v1 子函数调用返回结果 4-7 a0-a3 子函数调用的参数 8-15 t0-t7 临时寄存器 在子函数中使用时不需要保存与恢复 24-25 t8-t9 16-23 s0-s7 保存寄存器 在子函数中使用这些寄存器时, 子函数必须保 存和恢复这些寄存器的原值 26,27 k0,k1 通常被中断或异常处理程序使用, 用来保存一些系统参数 28 gp 全局指针 一些运行系统维护这个指针来更方便的存取 static 和 extern 变量 29 sp 堆栈指针 30 s8/fp 第 9 个保存寄存器 / 帧指针 31 ra 子函数的返回地址 10

MIPS 体系结构概述 整数除法相关的寄存器有两个和乘法相关的寄存器 hi 和 lo, 用来保存计算结果 它们不是通用寄存器, 只能用于乘除操作 11

MIPS 体系结构概述 浮点寄存器浮点加速器 (FPA,floating-point accelerator) 如果可用, 则增加了 32 个浮点寄存器 $f0~ $f31 12

MIPS 指令集简介 MIPS 指令集包括三类指令 : 数据处理指令 实现算术与逻辑运算 数据传送指令 实现寄存器和内存间的数据交换分支指令 实现程序流程控制 13

MIPS 指令集简介 算术运算指令 add $t0,$t1,$t2 # $t0 = $t1 + $t2 sub $t2,$t3,$t4 # $t2 = $t3 - $t4 addu $t1,$t6,$t7 # $t1 = $t6 + $t7 无符号整数加法 subu $t1,$t6,$t7 # $t1 = $t6 + $t7 无符号整数减法 addi $t2,$t3, 5 # $t2 = $t3 + 5 加 16 位立即数 addiu $t2,$t3, 5 # $t2 = $t3 + 5 加 16 位无符号立即数 MIPS 没有减立即数的指令, 如何实现减立即数操作? 14

MIPS 指令集简介 算术运算指令 mul $t0,$t1,$t2 # $t0 = $t1 * $t2, 仅保存乘积的低 32 位 mult $t3,$t4 multu $t3,$t4 # 两个 32 位的量相乘, 结果保存在特殊 # 寄存器 hi 和 lo 中,(hi,lo) = $t3 * $t4 # 无符号数乘法 div $t5, $t6 # lo = $t5 / $t6,hi = $t5 mod $t6 divu $t5, $t6 # 无符号数除法 mfhi $t0 mflo $t1 # $t0 = hi # $t1 = lo 15

MIPS 指令集简介 逻辑运算指令 and $t0,$t1,$t2 # $t0 = $t1 & $t2 or $t0,$t1,$t2 # $t0 = $t1 $t2 xor $t0,$t1,$t2 # $t0 = $t1 $t2 nor $t0,$t1,$t2 # $t0 = ~($t1 $t2) 如何实现 NOT 运算? 16

MIPS 指令集简介 逻辑运算指令 立即数逻辑运算 andi $t0,$t1,10 ori $t0,$t1,10 xori $t0,$t1,10 17

MIPS 指令集简介 逻辑运算指令 移位运算 sll $t0, $t1, 10 srl $t0, $t1, 10 sra $t0, $t1, 10 # $t0 = $t1 << 10, shift left logical # $t0 = $t1 << 10, shift right logical # $t0 = $t1 << 10, shift right arithm. sllv $t0, $t1, $t3 # $t0 = $t1 << $t3, shift left logical srlv $t0, $t1, $t3 # $t0 = $t1 << $t3, shift right logical srav $t0, $t1, $t3 # $t0 = $t1 << $t3, shift right arithm. 18

MIPS 指令集简介 比较指令比较两个寄存器的内容, 并根据比较的结果设置第三个寄存器 slt $t1,$t2,$t3 # if ($t2 < $t3) $t1=1; # else $t1=0 sltu $t1,$t2,$t3 # 无符号比较寄存器与立即数比较 slti $t1,$t2,10 # 与立即数比较 sltu $t1,$t2,$t3 # 与无符号立即数比较 19

MIPS 指令集简介 数据传送指令 存储 (store) 指令 实现寄存器到内存的数据传送 sw $t3, 500($t4) #Store word sh $t3, 502($t2) #Store half sb $t2, 41($t3) #Store byte MIPS 只支持基址 + 偏移量的寻址方式 20

MIPS 指令集简介 数据传送指令 装入 (load) 指令 实现内存到寄存器的数据传送 lw $t1, 30($t2) #Load word lh $t1, 40($t3) #Load half word lhu $t1, 40($t3) #Load half word unsigned lb $t1, 40($t3) #Load byte lbu $t1, 40($t3) #Load byte unsigned 21

MIPS 指令集简介 数据传送指令装入高位立即数 (load upper immediate) lui $t1, 30 例, 将 32 位立即数 0x1234abcd 装入 $t1 寄存器 lui $t1, 0x1234 ori $t1, $t1, 0xabcd 22

MIPS 指令集简介 分支 (branch) 指令 比较并分支 beq rs, rt, Target bne rs, rt, Target # 如果 rs=rt, 则分支执行标 # 号为 Target 的指令 # 如果 rs!=rt, 则分支执行 # 标号为 Target 的指令 23

MIPS 指令集简介 分支 (branch) 指令 与 0 比较并分支 blez rs, Target # 如果 rs<=0, 则分支 bgtz rs, Target # 如果 rs>0, 则分支 bltz rs, Target # 如果 rs<0, 则分支 bgez rs, Target # 如果 rs>=0, 则分支 24

MIPS 指令集简介 跳转 (jump) 指令 无条件分支 j Exit # 无条件跳转到标号 Exit 处 25

MIPS 指令集简介 堆栈操作虽然 MIPS 有 32 个通用寄存器, 但是在某些情况下 ( 例如子程序调用 ) 仍然需要将寄存器的内容换出到内存中, 在这种情形下, 堆栈是保存寄存器内容的理想场所 MIPS 有一个 $sp 寄存器可以用做堆栈指针, 但是 MIPS 没有 PUSH 和 POP 指令, 堆栈的操作必须由程序员自己维护 26

MIPS 指令集简介 堆栈操作例, 将 $s1 $s2 $s3 寄存器的内容压入堆栈 addi $sp, $sp, -12 sw $s1, 8($sp) sw $s2, 4($sp) sw $s3, 0($sp) 高地址 $sp $s1 的内容 $s2 的内容 $s3 的内容 高地址 $sp 低地址 低地址 压桟前 压桟后 27

MIPS 指令集简介 堆栈操作 出桟操作 lw $s1, 8($sp) lw $s2, 4($sp) lw $s3, 0($sp) addi $sp, $sp, 12 $s1 的内容 $s2 的内容 $s3 的内容 高地址 $sp 高地址 $sp 低地址 低地址 出桟前 出桟后 28

MIPS 指令集简介 过程调用 MIPS 的过程调用遵循如下约定 : 通过 $a0~$a3 四个参数寄存器传递参数 通过 $v0~$v1 两个返回值寄存器传递返回值 通过 $ra 寄存器保存返回地址 29

MIPS 指令集简介 过程调用子程序调用通过跳转与链接指令 jal 进行 jal Procedure # 将返回地址保存在 $ra 寄存器 # 中, 程序跳转到过程 # Procedure 处执行 子程序返回通过寄存器跳转指令 jr 进行 jr $ra # 跳转到寄存器指定的地址 30

MIPS 汇编语言程序设计 SPIM 是主要的 MIPS 模拟器, 能够运行和调试 MIPS 汇编语言程序 SPIM 支持 Uinx Windows 等多个操作系统平台 31

MIPS 汇编语言程序设计 寄存器窗口 正文段 数据与堆栈段 SPIM 消息 32

MIPS 汇编语言程序设计 内存布局 0x7fffffff 保留 堆栈段 0x10000000 0x00400000 动态数据 静态数据 保留 数据段 正文段 33

MIPS 汇编语言程序设计 MIPS 汇编语言语句格式 指令与伪指令语句 [Label:] <op> Arg1, [Arg2], [Arg3] [#comment] 汇编指示语句 [Label:].Directive [arg1], [arg2],... [#comment] 34

MIPS 汇编语言程序设计 伪指令 (Pseudo-instructions) 为编程方便而对扩展指令集进行的扩展, 并非真正的指令 例如,ble move 等 编程时, 伪指令可以和指令一样在程序中使用, 在汇编时伪指令将被等效的指令取代 35

MIPS 汇编语言程序设计 伪指令的例子 move $2, $4 # 寄存器间数据传送,$2 = $4 add $2, $4, $0 li $8, 40 # 装入立即数,$8 = 40 addi $8, $0, 40 sd $4, 0($29) # mem[$29] = $4; # mem[$29+4] = $5 sw $4, 0($29) sw $5, 4($29) la $4, 0x1000056c lui $4, 0x1000 ori $4, $4, 0x056c # 装入地址,$4 = <address> 36

MIPS 汇编语言程序设计 汇编指示 ( 伪指令 ) 的例子.align n # 以 2 n 字节边界对齐数据..ascii <string>.asciiz <string>.data [address].text [address] # 在内存中存放字符串 # 在内存中存放 NULL 结束的 # 字符串 # 定义数据段 # [address] 为可选的地址 # 定义代码段.word w1, w2,..., wn # 在内存中存放 n 个字 37

MIPS 汇编语言程序设计 Hello world main: str:.text.align 2 la $4, str li $2, 4 syscall li $2, 10 syscall.data.align 2.asciiz "Hello world." # print string # exit 38

MIPS 汇编语言程序设计 系统调用 SPIM 提供系统调用指令 (syscall) 提供了一组类似操作系统的服务 调用方法 : 将系统调用代码装入 $v0($2) 寄存器 将参数 ( 如果有 ) 装入 $a0($4) $a1($5) 或 $f12 寄存器 Syscall 返回值保存在 $v0($2) 或 $f0 寄存器中 39

MIPS 汇编语言程序设计 系统调用 代码 服务 参数 结果 1 print integer $a0 2 print float $f12 3 print double $f12 4 print string $a0 5 read integer integer in $v0 6 read float float in $f0 7 read double double in $f0 8 read string $a0=buffer, $a1=length 9 sbrk $a0=amount address in $v0 10 exit 40

MIPS 汇编语言程序设计 main: loop: 计算 0 2 +1 2 +2 2 + +100 2.text.align 2 la $10, Temp lw $14, 4($10) mul $15, $14,$14 lw $24, 0($10) add $25, $24,$15 sw $25, 0($10) addi $8, $14, 1 sw $8, 4($10) ble $8, 100, loop la $4, str li $2, 4 syscall li $2, 1 lw $4, 0($10) syscall li $2, 10 syscall.data.align 2 Temp:.word 0, 0 str:.asciiz "The sum of square from 0 to 100 is " 41

MIPS 汇编语言程序设计 计算 n!.data.align 2 str:.asciiz "The factorial is " main:.text.align 2 la $a0, str li $v0, 4 syscall li $a0, 6 jal factorial #nop move $a0, $v0 li $v0, 1 syscall li $v0, 10 syscall factorial: addi $sp, $sp, -8 sw $ra, 4($sp) sw $a0, 0($sp) slti $t0, $a0, 1 beq $t0, $zero, L1 addi $v0, $zero, 1 addi $sp, $sp, 8 jr $ra L1: addi $a0, $a0, -1 jal factorial #nop lw $a0, 0($sp) lw $ra, 4($sp) addi $sp, $sp, 8 mul $v0, $a0, $v0 jr $ra 42

小结 MIPS 体系结构概述 MIPS 指令集简介 MIPS 汇编语言程序设计要求理解相关的内容 43