- 1、本文档共21页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MIPS汇编
MIPS汇编汇编语言指令格式: [标签:]操作符[操作数] [#注释]标签:可选 标记内存地址,必须跟冒号 通常在数据和代码段出现操作符: 定义操作(如add,sub等)操作数: 指明操作需要的数据 可以是寄存器、内存变量或常数 大多数指令有3个操作数 L1:addiu $t0,$t0,1MIPS汇编程序框架.data伪指令 定义程序的数据段,程序的变量需要在该伪指令下定义,汇编程序会分配和初始化变量的存储空间.text伪指令 定义程序的代码段.global伪指令 声明一个符号位全局的,全局符号可以被其他的文件引用,用该伪指令声明一个程序的main过程寻址直接寻址 la $t0,var1 把var1在主存中的地址拷贝到寄存器t0。var1可以是标签地址间接寻址 lw $t2,($t0) 把t0存放的地址处的字拷贝到t2中 sw $t2,($t0) 把t2中的字存储到t0中地址所指向的主存位置基址寻址 lw $t2,4($t0) 把t0中地址加4所得的地址所对应的主存中的字载入寄存器t2中,4为偏移量数据定义 [名字:]伪指令 初始值[,初始值]….数据定义的例子:跳转(绝对地址)指令:JAL(Iump-and-Link):调用指令 jal label #$31=PC+8,jump 在$ra=PC+8中保存返回地址并跳转到相应的过程JR(Jump Register):返回指令 jr Rs #PC=Rs,将控制转移到任意地址 跳转到在寄存器Rs(PC=Rs)中存储的地址所在指令 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)中存储的地址所在过程,地址仅在运行时可知分支(PC相对寻址)指令:PC+labelb label goto labelbeq s,t,label if(s==t)goto labelbeql s,t,label if(s==t)goto label)beq可能分支变体,仅当分支放生时才执行延迟槽指令beqz s,label if(s==0)goto label,可能分支变体beqzlbgez s,label if(s=0)goto labelbgtz s,label if(s0)goto labelbne s,t,label if(s!=t)goto label,可能分支变体bnelbnez s,label if(s!=0)goto label,可能分支变体bnezlblez s,label if(s=0)goto label),可能分支变体blezlbltz s,label if(s0)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)lhu d,addr 16位加载,零扩展到整个寄存器,d=*((unsigned short *)addr)lbu d,addr 8位加载,零扩展到整个寄存器,d=*((unsigned char *)addr)lb d,addr 8位加载,符号扩展到整个寄存器,d=*((signed char *)addr)lwc2 cd ,addr 32位加载到协处理器2寄存器,如果实现了的话,很少见lwxc1 fd,t(b) 采用索引(寄存器+寄存器)地址加载32位浮点,常写为l.s,fd=*((float *(t+b)li d,j 将常数j的值放入到寄存器d中lui t,u (Load Upper Immediat)上位加载立即数(常数u符号扩展到64位寄存器),t=u16ldc1 d,addr 64位加载协处理器1(浮点)寄存器,常写成l.dldc2 d,addr 64位加载协处理器2寄存器,如果采用了协处理器2并且宽度为64位的话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的值会被
文档评论(0)