大学课程《汇编语言程序设计—基于x86与MIPS架构》PPT课件:第5章 MIPS汇编基础.pptx
- 文档编号:18833519
- 上传时间:2023-12-27
- 格式:PPTX
- 页数:41
- 大小:3.18MB
大学课程《汇编语言程序设计—基于x86与MIPS架构》PPT课件:第5章 MIPS汇编基础.pptx
《大学课程《汇编语言程序设计—基于x86与MIPS架构》PPT课件:第5章 MIPS汇编基础.pptx》由会员分享,可在线阅读,更多相关《大学课程《汇编语言程序设计—基于x86与MIPS架构》PPT课件:第5章 MIPS汇编基础.pptx(41页珍藏版)》请在冰点文库上搜索。
,MIPS汇编基础,汇编语言程序设计,第五章MIPS汇编基础,MIPS汇编程序框架,5.1MIPS指令集简介,MIPS指令集简介,4,北方工业大学信息学院,MIPS背景知识,MIPS指令集简介,5,北方工业大学信息学院,MIPS背景知识,MIPS指令集简介,6,北方工业大学信息学院,指令集特点(与X86指令集对比),MIPS指令集简介,7,北方工业大学信息学院,指令集特点(与X86指令集对比),MIPS指令集简介,8,北方工业大学信息学院,指令集特点(与X86指令集对比),MIPS指令集简介,9,北方工业大学信息学院,MIPS基本地址空间,kseg0只需要把最高位清零(&0x7fffffff),这些地址就被转换为物理地址,然后把它们连续地映射到物理内存的低端512M(0x00000000-0x1FFFFFFF)空间。
因为这种映射是很简单的,不需要MMU转换,通常把这些地址称为“非翻译无需转换的”(Unmapped)地址区域,kseg1通过将最高3位清零(&0x1fffffff)的方法来把这些地址映射为相应的物理地址,是“非翻译无需转换的”(Unmapped)地址区域。
注意,kseg1不使用缓存(Uncached)。
kseg1是唯一的在系统重启时能正常工作的内存映射地址空间。
kseg2这段地址空间只能在核心态下使用并且要经过MMU转换。
在MMU设置好之前,不能存取这段区域。
除非你在写一个真正的操作系统,一般来说你不需要使用这段地址空间。
kuseg这些是用户模式下可用的地址,即MIPS规范约定用户空间为2G。
在带有MMU的机器里,这些地址都将由MMU转换。
除非已经设置好MMU,否则不要使用这2G地址。
第五章MIPS汇编基础,MIPS汇编程序框架,5.2MIPS通用寄存器和指令格式,MIPS通用寄存器和指令格式,12,北方工业大学信息学院,MIPS通用寄存器和指令格式,13,北方工业大学信息学院,特殊寄存器,MIPS32架构中定义的特殊寄存器有三个:
PC(ProgramCounter程序计数器)、HI(乘除结果高位寄存器)、LO(乘除结果低位寄存器)。
进行乘法运算时,HI和LO保存乘法运算的结果,其中HI存储高32位,LO存储低32位;进行除法运算时,HI和LO保存除法运算的结果,其中HI存储余数,LO存储商。
MIPS通用寄存器和指令格式,14,北方工业大学信息学院,MIPS指令类型,MIPS通用寄存器和指令格式,15,北方工业大学信息学院,R型指令,MIPS通用寄存器和指令格式,16,北方工业大学信息学院,I型指令,MIPS通用寄存器和指令格式,17,北方工业大学信息学院,J型指令,MIPS通用寄存器和指令格式,18,北方工业大学信息学院,【例5.1】根据MIPS指令操作码定义以及指令格式给出以下指令的各个字段的十进制值:
add$8,$17,$18,答:
指令是R格式指令,第一个字段和最后一个字段的值分别为0和32。
第二个字段为17第三个字段为18第四个字段为8第五个字段未使用被设置为0,MIPS通用寄存器和指令格式,19,北方工业大学信息学院,访问存储器指令,MIPS通用寄存器和指令格式,20,北方工业大学信息学院,取存储器地址:
LA。
LA类似x86里的lea指令。
例如:
la$a0,mymessage。
将存储器的地址给寄存器,即将mymessage的地址给$a0也就是10000000h.,MIPS通用寄存器和指令格式,21,北方工业大学信息学院,存储器取指令:
LB和LW。
LB是取一个字节,LW是取一个字。
除此之外LB和LW的使用方法一致。
例如:
lb$t1,array。
该指令的意思是将array这个地址中取一个字节放到$t1寄存器中。
MIPS通用寄存器和指令格式,22,北方工业大学信息学院,lb也可以直接从地址中取字节。
例如:
lb$t1,0x10000000,直接从地址10000000h取一个字节到寄存器$t1。
MIPS通用寄存器和指令格式,23,北方工业大学信息学院,存储器存指令:
SB和SW。
SB是存一个字节,SW是存一个字。
例如:
sb$t1,address。
该指令的意思将$t1寄存器中的一个字节33放到address地址中去。
MIPS通用寄存器和指令格式,24,北方工业大学信息学院,MIPS寻址模式,立即数寻址-操作数是位于指令自身中的常数。
例如:
addi$s4,$t5,-73例如:
ori$t3,$t7,0xFF,寄存器寻址-操作数是寄存器。
例如:
add$s0,$t2,$t3例如:
sub$t8,$s1,$0,MIPS通用寄存器和指令格式,25,北方工业大学信息学院,MIPS寻址模式,基址寻址或偏移寻址-例如lw和sw,是将16位地址字段做符号扩展成32位与PC相加,操作数在内存中,其地址是指令中基址寄存器和常数的和。
例如:
lw$s4,72($0)地址=$0+72例如:
sw$t2,-25($t1)地址=$t125,MIPS通用寄存器和指令格式,26,北方工业大学信息学院,MIPS寻址模式,PC相对寻址-条件分支指令在进行分支跳转时,使用相对PC寻址方式来确定PC的新值,将16位地址左移2位与PC(已更新为PC+4)相加。
第五章MIPS汇编基础,MIPS汇编程序框架,5.3MIPS汇编程序框架,MIPS汇编程序框架,29,北方工业大学信息学院,MIPS源程序框架,.data伪指令用来定义程序的数据段,程序的变量需要在该伪指令下定义。
汇编程序会分配和初始化变量的存储空间。
.text伪指令用来定义程序的代码段。
.global伪指令声明某一个符号为全局变量,全局符号可被其他的符号引用。
MIPS汇编程序框架,30,北方工业大学信息学院,数据段,MIPS汇编程序框架,31,北方工业大学信息学院,数据段,
(1)var1:
.word3#声明一个word类型的变量var1,同时给其赋值为3
(2)array1:
.bytea,b#声明一个存储2个字符的数组array1,并赋值a,b(3)array2:
.space40#为变量array2分配40字节(bytes)未使用的连续空间(4)str1:
.ascii“Helloworldn”#声明一段字符串,内容为:
”Helloworldn”,数据声明的格式为:
变量名:
数据类型变量值,MIPS汇编程序框架,32,北方工业大学信息学院,代码段,MIPS指令的基本格式如下:
标号:
操作符操作数#注释其中标号部分可选,用于标记内存地址,若定义标号则后面必须添加冒号。
操作符用于定义操作(如add,sub等)。
操作数:
用于指明操作需要的数据。
可以是寄存器、内存变量或常数。
大多数指令有3个操作数。
MIPS汇编程序框架,33,北方工业大学信息学院,系统调用Syscall,.data#数据段str:
.asciizHelloMIPSAssmbly!
n#定义字符串str.text#代码段la$a0,str#将str的地址赋给寄存器$a0li$v0,4#将寄存器$v0赋值为4syscall#调用syscall,打印字符串strli$v0,10#将寄存器$v0赋值为10syscall#调用syscall,退出程序,MIPS汇编程序框架,34,北方工业大学信息学院,系统调用Syscall,MIPS汇编程序框架,35,北方工业大学信息学院,【例5-2】程序的功能是从键盘读出一个字符并显示,试用MIPS汇编语言写出。
data#数据段msg_read:
.asciizGivenumber:
#定义字符串msg_readmsg_print:
.asciiznNumber=#定义字符串msg_print.text#代码段la$a0,msg_read#将msg_read地址赋给寄存器$a0li$v0,4#将寄存器$v0赋值为4syscall#调用syscall,输出字符串msg_readli$v0,5#将寄存器$v0赋值为5syscall#调用syscall,读取一个整型move$t1,$v0#将寄存器$v0的值赋给寄存器$t1li$v0,4#将寄存器$v0赋值为4la$a0,msg_print#将msg_print地址赋给寄存器$a0syscall#调用syscall,输出字符串msg_printli$v0,1#将寄存器$v0赋值为1move$a0,$t1#将寄存器$t1的值赋给寄存器$a0syscall#调用syscall,打印一个整型li$v0,10#将寄存器$v0赋值为10syscall#调用syscall,退出程序,5.4MARS调试工具介绍,MIPS模拟器,37,北方工业大学信息学院,MARS是MIPSAssemblerandRuntimeSimulator(MIPS汇编器和运行时模拟器)的缩写能够运行和调试MIPSMARS采用JARA开发,需要JARA运行库http:
/courses.missouristate.edu/KenVollmar/MARS/轻量级的IDE,只有4M,MIPS模拟器界面,38,北方工业大学信息学院,32个寄存器,代码编辑区,运行情况和结果显示,代码段,数据段,存储器空间使用约定,39,北方工业大学信息学院,.datastr:
.asciizHelloMIPSAssmbly!
n,.text.globlmainmain:
la$a0,strli$v0,4,syscallli$v0,10syscall,0x00400000,0x10010000,0x10040000,0x7fffeffc,保留,系统内存区,栈,静态数据,正文(指令),动态数据(堆),课后作业,40,北方工业大学信息学院,1.MIPS指令分为R、I、J三种类型的指令,下列关于MIPS指令格式的描述中,正确的是()(多选)A、指令长度固定B、操作码字段长度固定C、指令中寄存器字段长度固定D、立即数字段长度固定2、下列关于MIPS寻址的下列描述中,正确的是()(多选)A、相对寻址时,将32位地址左移两位的目的是为了实现按32位整数边界对齐存放B、伪直接寻址时,26位直接地址左移两位的目的是为了使32位地址的低两位为0,实现按32位的整数边界对齐存放C、立即数寻址时,指令中的立即数直接送给指令中指定的寄存器D、MIPS指令中不单独设置寻址方式字段,THANKYOU,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言程序设计基于x86与MIPS架构 大学课程汇编语言程序设计基于x86与MIPS架构PPT课件:第5章 MI
链接地址:https://www.bingdoc.com/p-18833519.html