本次笔记内容:
28.MIPS指令集与汇编程序设计-2
补充:MIPS32异常处理
注:我找到了对应内容的课件,请见我于GitHub的CS笔记仓库。
本节课对应幻灯片:汇编语言程式设计-MIPS.pdf,第49页起。
在B站视频中,缺了一节课,即 ‘MIPS32异常处理’ ,感谢 UP 主
东南偏南2018
做的补充:汇编语言程序设计(清华大学张悠慧)P27。
我们讲 MIPS32 ,主要集中在其特色部分。
文章目录
P49 定长指令造成了一些困扰
如上。某些操作数的限制(如立即数宽度)增加了汇编编程难度。为降低难度,MIPS汇编器会做一些预处理。
如上,at
寄存器保留给汇编器专用,就用在了这里。因此一般情况下不要手动使用。
对于 li $3, -5
,其意义其实就是因为 -5 不大,因此直接用 addiu 装到 $3 中。
对于 li $4, 0x8000
正好放得下 16 位中,因此转换的方法较多,这里转换为 ori 或指令
,是可以的。
对于 0x120000
,把 12 拿出来,放到高 16 位对应的位置,低 16 位清零。
对于 0x12345
,对于低 16 位不全为 0 的,转换为两条指令 lui
与 ori
。
在如上的例子中,对于第三条 lw $2, addr
,这个数宽度较大,至少得把这个指令拆成两条:
%hi
相当于汇编中的宏,取高的半字(16位);%lo
则是取低的半字。
对于 sw $2, addr($3)
,在基址上加上偏移。