MIPS汇编指令
- MIPS-32概述
- 三类汇编指令
- 过程支持
- c程序执行过程
- 五种寻址方式
- 字符支持 同步指令队ll-sc 排序程序 ARM与x86
计算机本质执行机器语言指令-01串
MIPS作为RISC指令集,力求简单,所用均为MIPS-32(32位长)
MIPS运算操作数必须来自寄存器-register或者位于cpu中比cache小的存储器-层式存储结构的塔尖部分
专用寄存器如程序计数器pc
相对的为通用寄存器-暂时存放运算数据
MIPS由32个32位寄存器,共128B
有如下约定:
小于则置位 slt
条件分支 beq bne
分支伪指令 blt bgt ble bge
无条件跳转 j
三种指令格式
R型 add,sub,sll
I型 addi,lw,sw
J型 j
算术运算
c=a+b
add c,a,b
将a和b中的数据相加,并将结果存放在c中
减法ab有序
通式:add/sub des,src1,src2
i++/i=i+1
加法指令的src2改为常数1
没有subi 即立即数可以为附属
逻辑按位、移位运算
同时为1 与and结果为1
至少一个为1 或or结果为1
任何数据 非nor结果01取反
shift left logic
sll s 0 , s0, s0,s1,2 里面的2是位移量要与addi的立即数区分开
注意里面的*5用4+1简化,没有subi,临时变量用$t0
寄存器-存储器数据传送指令
运算指令的操作数来自寄存器或这令本身
通用寄存器一共只有128B
数组元素占据成千上万个字节,只能存放在内存中
数组的第一个元素a[0]的32位地址称为数组的基址
如果源操作数在内存中,a[5]的地址表示为20($s1),机器会自动算好基址和偏移量,找到a[5]的地址
MIPS的通用寄存器都是32位长
这个长度就是MIPS体系结构的字长,通常代表了参与运算的数据长度
因此约定,1字=32b=4B
a[5]相对于a[0],在内存中距离是5个字而不是5个字节,而内存按照字节编址,所以偏移量应该是20字节
寄存器间的数据传送 装载立即数到寄存器
MIPS没有专门的寄存器间的移动数据的指令,可以通过把源寄存器的数据加上0再保存到目标寄存器中
addi s 1 , s1, s1,t0,0
add s 1 , s1, s1,t0,$zer0
用伪指令move s 1 , s1, s1,s0
把常数10装入寄存器$s2
addi s 2 , s2, s2,zero,10
伪指令li $s2,10
装载32位立即数到寄存器
立即数只能占用32位的16位
我们必须先用取高位立即数lui,放在高16位,之后再用ori与低16位立即数7FFF进行或运算
不能使用addi代替ori指令,如果低16位的最高位是1,addi就会理解为负数
数据大于32767,无脑使用装在32位立即数到寄存器
地址的字节表示不可以表示4i( s 0 ) , 需要单独列出 4 i 数字,根据题意 i 就是 s0),需要单独列出4i数字,根据题意i就是 s0),需要单独列出4i数字,根据题意i就是s1所存的数
就酱,感谢你的阅读