1
微机原理
(计算机原理)
第6讲 MIPS指令系统(3)
2清华大学电子
工程
路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理
系,马洪兵,2011年秋
MIPS模拟器
MIPS汇编语言语法
MIPS汇编程序实例
第6讲MIPS指令系统(3)
3清华大学电子工程系,马洪兵,2011年秋
SPIM
SPIM是主要的MIPS模拟器,能够运行和调试
MIPS汇编语言程序
SPIM支持Uinx、Windows等多个操作系统平
台
http://spimsimulator.sourceforge.net/
4清华大学电子工程系,马洪兵,2011年秋
SPIM
寄存器窗口
正文段
数据与堆栈段
SPIM消息
5清华大学电子工程系,马洪兵,2011年秋
MARS
MARS 是MIPS Assembler and Runtime
Simulator (MIPS汇编器和运行时模拟器)的缩
写
能够运行和调试MIPS汇编语言程序
MARS采用Java开发,跨平台
http://courses.missouristate.edu/KenVollm
ar/MARS/
6清华大学电子工程系,马洪兵,2011年秋
MIPS模拟器
7清华大学电子工程系,马洪兵,2011年秋
系统调用
MIPS模拟器通过系统调用指令(syscall) 提供
了一组类似操作系统的服务
调用方法:
将系统调用代码装入$v0(寄存器编号2)寄存器
将参数(如果有)装入$a0~$a3(寄存器编号4~7)
或$f12寄存器
Syscall
返回值保存在$v0或$f0寄存器中
8清华大学电子工程系,马洪兵,2011年秋
系统调用
代码 系统调用 参数 结果
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
9清华大学电子工程系,马洪兵,2011年秋
系统调用
代码 系统调用 参数 结果
11 print char $a0
12 read char char in $v0
13 open $a0=file name(string),
$a1=flags, $a2=mode
file descriptor
(fd) in $v0
14 read $a0 =fd, $a1=buffer,
$a2=length
num chars read
in $v0
15 write $a0 =fd, $a1=buffer,
$a2=length
num chars
write in $v0
16 close $a0 =fd
17 exit2 $a0=result
10清华大学电子工程系,马洪兵,2011年秋
Hello world
.text
main:
la $a0, str
li $v0, 4
syscall # print string
li $v0, 10
syscall # exit
.data
.align 2
str:
.asciiz "Hello world."
11清华大学电子工程系,马洪兵,2011年秋
内存布局
内存最低端保留,其上是正文段(代
码段)
正文段之上是静态数据段,存放全
局常量和其他静态数据
静态数据段之上为分配动态数据的
堆
栈由用户内存区的高地址端开始,
栈空间由高地址向低地址增长
各部分地址由软件规定,并非
MIPS体系结构的一部分
栈
动态数据(堆)
静态数据
正文 (指令)
保留
系统内存区
12清华大学电子工程系,马洪兵,2011年秋
Hello world
栈
动态数据(堆)
静态数据
正文 (指令)
保留
系统内存区
.text
main:
la $a0, str
li $v0, 4
syscall
li $v0, 10
syscall
.data
.align 2
str:
.asciiz "Hello world."
7fffeffc
10040000
10010000
00400000
MARS约定
13清华大学电子工程系,马洪兵,2011年秋
MIPS模拟器
MIPS汇编语言语法
MIPS汇编程序实例
第6讲MIPS指令系统(3)
14清华大学电子工程系,马洪兵,2011年秋
数据类型
整型数据:支持十进制、十六进制、八
进制,表示法和C语言相同
十进制数前不可以有无效的0
八进制数加前导0
十六进制加前导0x
15清华大学电子工程系,马洪兵,2011年秋
数据类型
浮点型数据:表示方法
<尾符>d1[.d2][e|E<阶符>d3]
其中,d1、d2、d3都是十进制数
例如:
36.25e-2
16清华大学电子工程系,马洪兵,2011年秋
数据类型
字符串:表示形式与C语言类似,以双引
号为标志
遵守C语言的“\”使用规则:
换行——\n
制表符——\t
引号——\”
17清华大学电子工程系,马洪兵,2011年秋
标识符
由字母、数字、下划线(_)、点(.)构成,
但不能以数字开头
指令助记符等保留字不能作标识符
18清华大学电子工程系,马洪兵,2011年秋
MIPS汇编程序语句
格式
pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载
指令与伪指令语句
[Label:]
Arg1, [Arg2], [Arg3] [#comment]
汇编命令(directive)语句
[Label:] .Directive [arg1], [arg2], . . . [#comment]
Label:为可选的标号,#comment为可
选的注释
19清华大学电子工程系,马洪兵,2011年秋
伪指令
伪指令(Pseudo-instructions)是为编程
方便而对指令集进行的扩展,并非真正
的指令。例如,ble、move等
编程时,伪指令可以和指令一样在程序
中使用,在汇编时伪指令将被等效的指
令取代
20清华大学电子工程系,马洪兵,2011年秋
常用的伪指令
move——寄存器到寄存器的数据传送
move $t2, $t4
add $t2, $zero, $t4
li——装入立即数,不同立即数的可能汇编成
不同的指令序列
li $t1, 40
addi $t1, $zero, 40
li $t1, -4000000
lui $at, 0xffc2
ori $t1, $at, 0xf700
21清华大学电子工程系,马洪兵,2011年秋
常用的伪指令
la——装入地址
la $t4, 0x1000056c
lui $at, 0x1000
ori $t4, $at, 0x056c
22清华大学电子工程系,马洪兵,2011年秋
常用的伪指令
分支伪指令
beqz rsrc, label——当寄存器rsrc=0时分支
bnez rsrc, label——当寄存器rsrc0时分支
beqz $s1, label
beq $s1, $zero, label
23清华大学电子工程系,马洪兵,2011年秋
常用的伪指令
分支伪指令
bge(u) rsrc1, src2, label——rsrc1>=src2时分支
bgt(u) rsrc1, src2, label——rsrc1>src2时分支
ble(u) rsrc1, src2, label——rsrc1<=src2时分支
blt(u) rsrc1, src2, label——rsrc1 # 在内存中存放字符串
.asciiz # 在内存中存放NULL结束的
# 字符串
.word w1, w2, . . . , wn # 在内存中存放n个字
.half h1, h2, . . . , hn # 在内存中存放n个半字
.byte b1, b2, . . . , bn # 在内存中存放n个字节
26清华大学电子工程系,马洪兵,2011年秋
汇编命令
.double d1, d2, …, dn # 在内存中存放n个双精度
# 浮点数
.float f1, f2, …, fn # 在内存中存放n个单精度
# 浮点数
.global sym # 指示sym为全局标记
27清华大学电子工程系,马洪兵,2011年秋
宏
宏(macro)提供了一种对经常使用的指令序列
进行命名的机制。使用宏时,程序员只需在源
程序中定义一次,就可以多次调用
宏与子程序相似——对频繁使用的指令序列进
行命名
宏与子程序的区别
子程序调用由处理器完成,宏指令调用在汇编
过程中由汇编器完成宏展开
子程序调用可以减小目标程序的大小,宏指令
调用不能
28清华大学电子工程系,马洪兵,2011年秋
宏
宏可以有参数
.macro print_string($arg)
la $a0, $arg
li $v0, 4
syscall # print string
.end_macro
29清华大学电子工程系,马洪兵,2011年秋
MIPS模拟器
MIPS汇编语言语法
MIPS汇编程序实例
第6讲MIPS指令系统(3)
30清华大学电子工程系,马洪兵,2011年秋
MIPS汇编程序实例
从键盘输入两个数,计算并输出这两个数的和
.data
str1: .asciiz "Enter 2 numbers:"
str2: .asciiz "The sum is "
.text
main:
li $v0, 4
la $a0, str1
syscall
li $v0, 5
syscall
add $t0, $v0, $zero
li $v0, 5
syscall
add $t1, $v0, $zero
li $v0, 4
la $a0, str2
syscall
li $v0, 1
add $a0, $t1, $t0
syscall
31清华大学电子工程系,马洪兵,2011年秋
MIPS汇编程序实例
计算12+22+…+1002
.text
main:
li $t0, 1
li $t8, 0
loop:
mul $t7, $t0, $t0
add $t8, $t8, $t7
addi $t0, $t0, 1
ble $t0, 100, loop
la $a0, str
li $v0, 4
syscall
li $v0, 1
move $a0, $t8
syscall
li $v0, 10
syscall
.data
.align 2
str: .asciiz "The sum of square
from 1 to 100 is "
32清华大学电子工程系,马洪兵,2011年秋
MIPS汇编程序实例
计算n! (n=6)
.data
.align 2
str: .asciiz "The factorial is "
.text
main:
la $a0, str
li $v0, 4
syscall
li $a0, 6
jal fact
move $a0, $v0
li $v0, 1
syscall
li $v0, 10
syscall
fact:
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 fact
lw $a0, 0($sp)
lw $ra, 4($sp)
addi $sp, $sp, 8
mul $v0, $a0, $v0
jr $ra
33清华大学电子工程系,马洪兵,2011年秋
小结
MIPS模拟器
MIPS汇编语言语法
MIPS汇编程序实例
34清华大学电子工程系,马洪兵,2011年秋
进一步学习的建议
2nd Edition:3.9、附录A
3rd Edition:2.10、附录A
35清华大学电子工程系,马洪兵,2011年秋
课后作业
2.37、2.38
36清华大学电子工程系,马洪兵,2011年秋
实验1:MIPS汇编语言程序设计
题目:A.6、A.7、A.8、A.9、A.10
实验
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
要求:
设计思路说明
算法说明(必要时可以包含
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
图)
程序
清单
安全隐患排查清单下载最新工程量清单计量规则下载程序清单下载家私清单下载送货清单下载
(应当包含适当的注释)
运行结果