没有合适的资源?快使用搜索试试~ 我知道了~
1.1 基本的MIPS指令 1.2 条件判断指令 1.3 Procedure Instructions 过程调用指令 1.3.1 caller-saved和ca
资源详情
资源评论
资源推荐
计
算
机
系
统
原
理
Review
RandomStar
非
常
天
空
0.
计
算
机
基
本
知
识
计算机系统原理(feat Mr.Lou)荣获感动软工十大垃圾课前三名
软件的分类
System software系统软件
OS 操作系统
Database 数据库
Server 服务器
Compiler:以C语言为例,编译器将C语言转换成汇编语言,再由汇编器转换成machine
language二进制串
Application software 应用软件
其他各种用途的东西
计算机硬件基本知识
Motherboard
主
板
包含 I/O devices,memory,processor三个部分
Memory:用于存储running programs and data needed,每块内存包含8个集成电路
Processor:用于处理运算等操作,CPU(central processor unit)
内部结构
计算机的5个基本组成部分
Input,Output,Memory,Data path,Control
计算机性能评价参数
主频:CPU内数字脉冲信号震荡的频率
CPU时钟周期:节拍脉冲或者T周期,是处理操作的最基本的单位
机器字长:计算机可以直接处理的二进制数据的位数,位数大则运算精度高
响应时间
吞吐量:系统在一定时间内能够处理的请求数量(对于总线和存储器有不同的含义)
计算机中的信息表示
bit是最小的单位,1byte=8bits,1kb=1024bytes,依次往上
1个字节就是8位二进制,而汉字在计算机中占2个字节
1. MIPS
指
令
系
统
1.1
基
本
的
MIPS
指
令
Operands 操作数
算术指令的操作数一定存放在在寄存器(registers)中
MIPS体系中有32个寄存器,每个寄存器有32bits
寄存器中可以用 $s0-$s7 来存储变量,其
编
号
为
16-23
这和C语言中的 register int i; 进行的操作相同
可以用 $t0,$t1,… 来存储一些临时变量,编号为8-15,各寄存器的功能和对应编号如下
Data transfer instructions 数据传输指令
需要获取数据在内存的地址
读取数据用lw,存储数据用sw,
寄
存
器
中
存
储
了
数
据
在
内
存
中
的
地址
Offset 偏移量:数据传输指令中的常数,表示读取多少位
Base Register:用于存储
基
地址
的寄存器(比如数组的基地址)
MIPS中的地址偏移量和数组下标之间的关系是4
倍
,比如数组A的基地址在 $s3 中,要
获取A[8],则需要指令 lw $t0,32($s3)
原因是内存中一次只能读出4
字
节
内
存
中
的
一
行
,也就是1word的长度,事实上一条
MIPS指令的长度就是1word
MIPS指令对应的机器码格式
R型指令: OP+RS+RT+RD+shamt+funct
I型指令: OP+RS+RT+address
OP是对应的
操
作
码
,RS,RT分别是第一个和第二个操作寄存器,RD是
目
标
寄
存
器
,shamt
是偏移量,func是函数对应的编码
R型指令的操作码没记错的话都是 00000
所有的MIPS
指
令
都
是
32
位
的,其中OP6位,寄存器都是5位,shamt是5位,funct是6位,
address是16位
这是设计的原则:good design demands good compromises
计算机的两条原则
指令用数字表示
程序可以存储在内存中,像数字一样读写
1.2
条
件
判
断
指
令
选择判断型指令
beq register1,register2,L1 和 bne register1,register2,L1
L1是一个行标号,可以在每行MIPS指令前写,跳转的时候就按照标号所在的位置进行
跳转
相当于C语言中的goto
例子:实现一个简单的loop,其中变量g,h,i,j存储在s1-s4而数组A的基地址存储在s5
跳转指令jr,用法是 jr $r r的计算方式是当前所在地址+4*要跳转的行数
一个函数结束的时候一定要写 jr $ra 来返回主函数
1.3 Procedure Instructions
过
程
调
用
指
令
用于过程调用的寄存器和指令
Loop: g=g+A[i];
i=i+j;
if (i!=h) goto Loop;
1
2
3
Loop:add $t1,$s3,$s3 #t1=2*i
add $t1,$t1,$t1
add $t1,$t1,$s5 #address if A[i]
lw $t0,0($s1)
add $s1,$s2,$t0 #g=g+A[i]
add $s3,$s3,$s4 #i=i+j
bne $s2,$s3,Loop
1
2
3
4
5
6
7
$a0-$a3 是4个传递参数到函数的寄存器
$v0-$v1 是2个用于存储返回值的寄存器
$ra 用于返回地址的寄存器
jal (jump and link) 用于跳转到一个函数中,后面的参数为要跳转的地址,使用 jar $ra 返
回主函数
$sp 一个栈指针,MIPS汇编中的栈从高地址往低地址扩展,支持Push和Pop两种操作
1.3.1 caller-saved
和
callee-saved
寄
存
器
Caller-saved register 易失性寄存器:用于保存每个调用过程中
不
需
要
在
各
个
调
用
之
间
保
留
的
临
时变量
Callee-saved register 非易失性寄存器,用于
保
存
需要在每个调用过程中保留的临时变量
MIPS在函数调用的过程中需要保留 $s0-$s7 和全局变量 $gp 和栈指针 $sp 还有 $fp
1.3.2
案
例
1
:
编
写
一个
简
单
的
函
数
调
用
其对应的MIPS汇编代码如下
Assume: g ~ j ---- r0 ~ r3 f ---- r4
往往在函数调用的时候把下一行的地址写在寄存器ra中,因此函数运行结束之后可以用 jr
$ra 指令返回到函数调用的下一句继续执行程序
函数编写的时候,s0-s7的寄存器需要被
保
护
,不能在函数中使用使用的,t0-t9存储临时变
量,可以视情况调用
1.3.3
案
例
2
:
循
环
调
用
Nested Procedure
简单的递归函数
int leaf_example ( int g, int h, int i, int j )
{
int f;
f=(g+h)-(i+j);
return f;
}
1
2
3
4
5
6
Leaf: addi $sp,$sp,-12 #adjust stack to make room for 3 items
sw $t1,8($sp)
sw $t0,4($sp)
sw $s0,0($sp)
add $t0,$a0,$a1 #g+h
add $t1,$a2,$a3 #i+j
sub $s0,$t0,$t1 #f=(g+h)-(i+j)
add $v0,$s0,$zero #return value in v0
lw * 3 #restore register for caller
add $sp,$sp,12
jr $ra
1
2
3
4
5
6
7
8
9
10
11
int fact(int n)
{
if(n<1) return 1;
else return n*fact(n-1);
}
1
2
3
4
5
对应的MIPS汇编如下:
$fp 提供了一了一个stable base register
$gp 指向静态变量static variables
1.4 Character Instruction
字
符
指
令
操作字节的MIPS指令
Load byte lb $t0,0($sp) 读取字节
Store byte sb $t0,0($sp) 存储字节
MIPS中表示字符串的三种方法
在string的开头先写好长度
维护一个表示string长度的变量
在末尾使用结束标志表示一个字符串的末尾(C语言的choice)、
同时还有
案
例
strcpy
的
MIPS
实
现
其对应的MIPS代码如下,其中x和y的首地址位于a0和a1
fact: add $sp,$sp,-8
sw $ra,4($sp)
sw $a0,0($sp)
slti $t0,$a0,1 #test for n<1
beq $t0,$zero,L1
add $v0,$zero,1 #return 1
add $sp,$sp,8
jr $ra #return to after j
L1: addi $a0,$a0,-1
jal fact #call fact with n-1
2000: lw $a0, 0($sp)
lw $ra, 4($sp)
addi $sp,$sp,8
mul $v0,$a0,$v0
jr $ra
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void strcpy(char x[], char y[])
{
int i=0;
while((x[i]=y[i])!=0)
i+=1;
}
1
2
3
4
5
6
剩余61页未读,继续阅读
7323
- 粉丝: 22
- 资源: 328
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0