2024年5月30日发(作者:)
MIPS
汇编语言简要介绍
一、数据类型和文法、寄存器
1、数据类型和文法
(1)数据类型:字节,byte占用8bits;半字,halfword占用2bytes(16bits);字,
word占用4bytes(32bits);双字,dword占用8bytes(64bits);
(2)一个字符需要1个Byte的空间;
(3)一个整数需要1个Word(4Bytes)的空间;
(4)MIPS结构的每条指令长度都是32bits,一个字的空间。
2、寄存器
(1)MIPS体系架构有32个通用寄存器。在汇编程序中,可以用编号0到31来表示;
(2)也可以用寄存器的名字来进行表示,例如:$v0、$v1、$s0、$sp、$ra….
(3)有两个特殊的寄存器Lo,Hi,用来保存乘法/除法的运算结果;此两个寄存器不能直
接寻址,只能用特殊的指令:mfhi和mflo来存取其中的内容。(含义:mfhi=movefromHi,
mflo=MovefromLow.)
(4)堆栈(Stack)的增长方向是:从内存的高地址方向,向低地址方向;
表格1:寄存器的编号名称及分类
寄存器编号
0
1
2、3
4-7
8-15
寄存器名称
$zero
$at
$v0,$v1
$a0-$a3
$t0-$t7
寄存器描述
第
0
号寄存器,其值始终为
0
(AssemblerTemporary)
是
Assembler
保留的寄存器
(values)
保存表达式或函数返回的结果
(arguments)作为函数的前四个入参。在子函数调用的过
程中不会被保留。
(temporaries)tinescanuse
withoutsaving.供汇编程序使用的临时寄存器。在子函数
调用的过程中不会被保留。
16-23$s0-$s7(savedvalues)-utineusingoneof
thesemustsaveoriginalandrestoreitbeforeexiting.在子
函数调用的过程中会被保留。
24、25$t8,$t9(temporaries)tinescanuse
withoutsaving.
供汇编程序使用的临时寄存器。在子函数
调用的过程中不会被保留。这是对
$t0-$t7
的补充。
26、27
28
$k0,$k1
$gp
保留,仅供中断
(interrupt/trap)
处理函数使用
globalpointer.
全局指针。
Pointstothemiddleofthe64K
blockofmemoryinthestaticdatasegment.
指向固态数据
块内存的
64K
的块的中间。
stackpointer堆栈指针,指向堆栈的栈顶。
savedvalue/framepointer保存的值/帧指针其中的值在
函数调用的过程中会被保留
returnaddress返回地址
29
30
31
$sp
$s8/$fp
$ra
二、汇编语言程序结构框架
汇编源程序代码本质上是文本文件。由数据声明、代码段两部分组成。汇编程序文件应
该以.s或.asm为后缀,在Spim模拟器中进行模拟。
1、数据声明部分
在源代码中,数据声明部分以“.data”开始。声明了在代码中使用的变量的名字。同时,
也在主存(RAM)中创建了对应的空间。
2、程序代码部分
在源代码中,程序代码部分以“.text”开始。这部分包含了由指令构成的程序功能代
码。代码以main:函数开始。main的结束点应该调用exitsystemcall,参见后文有关“表2:
系统调用的功能”。
3、程序的注释部分
使用“#”符号进行注释。每行以“#”引导的部分都被视作注释。
程序结构框架,如:
.data#数据声明部分
#...变量类型:
#字符串:
#.asciistring
#.asciizstring;以空字符null结束
#字类型:
#.wordw1,w2,...;32位,4个字节
#半字类型:
#.halfh1,h2,...;16位,2个字节
#字节类型:
#.byteb1,b2,...;8位,1个字节
#浮点数类型:
#.floatf1,f2,...;32位,4个字节
#双精度浮点数:
#.doubled1,d2,...;64位,8个字节
#空格符:
#.spacen;8位,1个字节。n个字节空间
#代码声明部分
#定义main为全程量
#主程序名称main,以下为程序代码部分
#编写的MIPS汇编语言程序是MIPS指令和伪指令的组合。
#伪指令(pseudoinstructions)是为了编程方便而对指令集进行的扩展。
.text
.globlmain
main:
#程序结束
四、MIPS指令的三种格式:
发布者:admin,转转请注明出处:http://www.yc00.com/news/1717051411a2733309.html
评论列表(0条)