MIPS汇编 ppt课件

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MIPS汇编
汇编语言指令格式:
[标签:] 操作符 [操作数] 标签:可选
标记内存地址,必须跟冒号 通常在数据和代码段出现
操作符:
定义操作(如add,sub等)
操作数:
指明操作需要的数据 可以是寄存器、内存变量或常数 大多数指令有3个操作数
[#注释]
L1: addiu $t0,$t0,1
MIPS汇编程序框架
sw t,addr sb t,addr sh t,addr swc1 ft,addr swc2 ft,addr sdc1 ft,addr sdc2 cs,addr
*((int *)addr)=t,存储一个字 *((char*)addr)=t *((short*)addr)=t 存储单精度浮点数到内存 存储协处理器2寄存器的32位数据 存储双精度寄存器到存储器,常写成s.d 存储64位协处理器2寄存器到存储器
数据定义的例子:
跳转(绝对地址)指令:
➢ JAL(Iump-and-Link):调用指令
jal label
#$31=PC+8,jump
在$ra=PC+8中保存返回地址并跳转到相应的过程
➢ JR(Jump Register):返回指令

jr Rs #PC=Rs,将控制转移到任意地址
– 跳转到在寄存器Rs(PC=Rs)中存储的地址所在指令
算术及逻辑指令
addu d,s,t d=s+t
addiu d,s,j
sub d,s,t subu d,s,j div d,s,t 异常
d=s+(signed)j d=s-t,溢出时自陷 d=s-j;addiu d,s,-j 有符号32位除法指令,在被零除和溢出条件下发生
divu $zero,s,t no checks,lo=s/t,hi=s%t

j label #只能到达2^28个字节的页内指令
– 目标地址的高4位是当前PC的高4位值
➢ JALR(Jump-and-Link Register)
jalr Rd,Rs #Rd=PC+8,PC=Rs
在Rd=PC+8中存储返回地址,跳转到寄存器Rs(PC=Rs)中存储的 地址所在过程,地址仅在运行时可知
➢ 间接寻址
lw $t2,($t0) 把t0存放的地址处的字拷贝到t2中 sw $t2,($t0) 把t2中的字存储到t0中地址所指向的主存位置
➢ 基址寻址
lw $t2,4($t0) 把t0中地址加4所得的地址所对应的主存中的字载入寄存器t2 中,4为偏移量
数据定义
[名字:] 伪指令 初始值[,初始值]….
ll(load linked)和sc(store conditional)组成原子操作:
ll d,off(b) …… sc t,off(b) ll从内存读取一个字,以实现接下来的RMW操作,sc向内 存中写入一个字,以完成前面的RMW操作。“ll d,off(b)”指令执 行后,处理器会记住ll操作,“sc t,off(b)”会检查上次ll指令执行 后的RMW操作是否是原子操作(不存在其他对这个地址的操 作),若是,t的值会被更新到内存中,同时t的值变为1,表示操 作成功;若不是,t的值不会被更新到内存,同时t的值变为0,表 示操作失败。
bgez s,label if(s>=0)goto label
bgtz s,label if(s>0)goto label
bne s,t,label if(s!=t)goto label,可能分支变体bnel
bnez s,label if(s!=0)goto label,可能分支变体bnezl
blez s,label if(s<=0)goto label),可能分支变体blezl
.data伪指令
定义程序的数据段,程序的变量需要在该伪指令 下定义,汇编程序会分配和初始化变量的存储空间
.text伪指令
定义程序的代码段
.global伪指令
声明一个符号位全局的,全局符号可以被其他的 文件引用,用该伪指令声明一个程序的main过程
寻址
➢ 直接寻址
la $t0,var1 把var1在主存中的地址拷贝到寄存器t0。var1可以是标签地址
lwc2 cd ,addr 32位加载到协处理器2寄存器,如果实现了的 话,很少见
Leabharlann Baidu
li d,j 将常数j的值放入到寄存器d中 lui t,u (Load Upper Immediat)上位加载立即数(常数u符号扩展到 64位寄存器),t=u<<16 ldc1 d,addr 64位加载协处理器1(浮点)寄存器,常写成l.d ldc2 d,addr 64位加载协处理器2寄存器,如果采用了协处理器2 并且宽度为64位的话
mult s,t
hilo=(signed)s*(signed)t
and d,s,t d=s&t
and d,s,j (andi d,s,j),d=s&(unsigned)j,仅用于0<=j<65535, 对于更大的数要生成额外的指令
maddu d,s,t 32位整数乘法累加,两个寄存器以全精度相乘并累 加hilo=hilo+((long long)s*(long long)t
bltz s,label if(s<0)goto label),可能分支变体bltzl
存储器访问
lw t,addr 展
t=*((int *)addr),32位加载,64位CPU上符号扩
lwl t,addr 向左加载一个字,非对齐加载 lwr t,addr 向右加载一个字 lh d,addr 16位加载,符号扩展到整个寄存器, d=*((signed short *)addr)
分支(PC相对寻址)指令:PC+label
b label
goto label
beq s,t,label if(s==t)goto label
beql s,t,label if(s==t)goto label)beq可能分支变体,仅当分支放生 时才执行延迟槽指令
beqz s,label if(s==0)goto label,可能分支变体beqzl
lhu d,addr 16位加载,零扩展到整个寄存器, d=*((unsigned short *)addr)
lbu d,addr 8位加载,零扩展到整个寄存器,d=*((unsigned char *)addr)
lb d,addr 8位加载,符号扩展到整个寄存器,d=*((signed char *)addr)
相关文档
最新文档