- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二章 MIPS体系结构
第二章 MIPS体系结构;2.1 MIPS汇编语言风格
#:注释
;:一行中多条指令用分号隔开
::单词后面跟着冒号指标号,代码中的入口点和命名数据区的一个存储位置
三种指令格式(所有指令都是32位):
R类型 I类型 J类型;(1)R型指令(从寄存器堆中取出两个操作数,计算结果写回寄存器堆);(2)I类型(用一个16位的立即数作为一个源操作数)
g = g + 4; (in C)
Lw $t0, 0($s3) # $t0=4 $s3=Address(4)
add $s1,$s1,$t0 # g=g+4
(3)J类型(用一个26位的立即数作为跳转的目标地址)
goto Label; (C语言)
J label (MIPS指令)
;2.2 寄存器
;gp:
PIC:维护GOT(global offset table)指针(16章)
非PIC:作基指针(链接时确定位置的静态数据中部)
lw ri,offset(gp) offset 16位,前后各32K
若没有gp,存储静态数据区域的值需要两条指令(获取地址,去存储数据)
;2.3 整数乘法部件及寄存器
MIPS CPU采用专用的整数乘法部件(可以执行两个通用寄存器的除法操作),并没有集成到流水线中去。
特殊寄存器:HI 、LO
HI:乘法结果高32位,除法余数
LO:乘法结果低32位,除法商
mfhi/mflo rt:将hi/lo内容传输到通用寄存器rt
mthi/mtlo rt:将通用寄存器rt内容传输到hi/lo(中断返回恢复现场)
结果寄存器互锁(运算未完成之前读取结果会使CPU停下等待);2.4 加载与存储:寻址方式
lw $1,offset($2)
offset:有符号16位数字(-32768~32767),前后各32K
加载所需地址=offset+$2寄存器的值
2.5 存储器与寄存器的数据类型
;(1)字节byte和halfword的加载方式
MIPS不能直接做8位和16位精度的算术运算
符号扩展:lb、lh
零扩展:lbu、lhu
(2)未对齐加载
地址对齐:使用访存指令读取或写入数据单元时,目标地址必须是所访问之数据单元字节数的整数倍
未对齐操作:
ulw(unaligned load word)
ulh(unaligned load halfword)
;(3)浮点数据
32位处理器:加载一个单精度的数据放入一个偶数号的浮点寄存器中
双精度(汇编指令展开为两个连续的寄存器加载)
l.d $f2,24(t1)
lwc1 $f2,24(t1)
lwc1 $f3,28(t1)
MIPS/SGI规则:八字节长的双精度???点变量对齐到八字节的地址边界上;2.6 汇编器合成指令
(1)LI
li d,j ? ori d,$zero,j 0=j=65535
? addiu d,$zero,j -32768=j0
? lui d,hi16(j) 32位整数的其他j情形
ori d,d,lo16(j)
将一个立即数存入一个通用寄存器
(2)LA
将一个地址(通常是一个标签)存入一个通用寄存器
(3)MOVE
move d,s ? or d,s,$zero
将一个寄存器的值存入另一个寄存器;2.7 MIPS64:64位的扩展
(1)保留所有的32位体系结构的指令
(2)MIPS32指令完全兼容(寄存器存放的是32位值的64位符号扩展)
(3)定义尽可能多的MIPS32指令(兼容性及做64位指令);2.8 基本地址空间;(1)kuseg:0x0000_0000~0x7FFF_FFFF(2G)
用户态可用地址,需MMU转换
(2)kseg0:0x8000_0000~0x9FFF_FFFF(512M)
最高位清零映射到低端512M的物理地址,unmapped,cached。无MMU,存放程序和数据;有MMU,存放操作系统核心。
(3)kseg1:0xA000_0000~0xBFFF_FFFF(512M)
最高三位清零映射到低端512M的物理地址,unmapped,uncached。唯一一个系统重启能正常工作的地址空间,复位入口地址0xBFC0_0000,相应物理地址0x1FC0_0000。存储初始的程序ROM或用作I/O寄存器。
(4)kseg2:0xC0
文档评论(0)