苏州那家公司做网站好,建设银行国际互联网站,网页设计基础知识试题,白云手机网站建设价格疑问#xff1a;sw和lw指令#xff0c;获取的地址不是4的整倍数#xff08;字节不对齐#xff09;的时候#xff0c;应该如何处理#xff1f;
东南大学MOCC 计算机系统综合设计 03
03-1 寄存器
介绍了MIPS寄存器#xff0c;32个寄存器的基本功能和使用#xff0c;注… 疑问sw和lw指令获取的地址不是4的整倍数字节不对齐的时候应该如何处理
东南大学MOCC 计算机系统综合设计 03
03-1 寄存器
介绍了MIPS寄存器32个寄存器的基本功能和使用注意
子程序调用寄存器t不保护与s的保护$31寄存器在子程序嵌套调用下如何使用$0只能为0写入其他值将会被忽略但是允许写入只是写完也没用
03-2 寻址方式
PC相对寻址
PC PC 4 ((sign-extend)imm 2)
为什么要扩展后左移两位因为32位指令进行字节对齐后一定是4的倍数因此最低两位一定是00所以就没必要存储上再占空间而计算的时候则要还原它。
字节寻址而不是字寻址 所有跳转指令的目标地址编译存储的时候都会➗4实际运行的时候都是乘以4还原。
04 典型指令讲解 MinSysy-1不处理异常 add和addu的区别前者溢出后进行异常处理后者不进行因此后者常用来进行地址计算如果偏移量为负值必然溢出但实际上只是地址往上跳转而已 由于暂时无异常处理所以add和adduaddi和addiu实际一样。 sub和subu也一样 u 代表的含义是溢出之后有没有异常处理。 对于立即数运算逻辑运算imm是零扩展例如andi算术运算imm是符号扩展例如addi这很好理解逻辑运算没有有无符号数的概念。具体指令具体分析 注意写操作的rs和rt的反着的源是rt目标地址是rs 偏移量 疑问sw和lw指令获取的地址不是4的整倍数字节不对齐的时候应该如何处理比如直接忽略不对齐的部分或者报异常
对于字读取如果不是4的倍数那么最低两位不是00但是存储的时候也一样 2又会给抹掉了。 把16位立即数赋值给32位寄存器的高16位。
对于beq和bne指令判断相等不相等直接用减法-判断就行了。
小于则赋值条件赋值指令 比大小自然应该是算术运算有符号数。
因此自然有无符号比较的小于置位。
显然是逻辑上的因此是零扩展。
就类似于函数调用调用完之后要返回$31值对应的地址。 jal和jr配合就实现了过程调用和返回。
注意有的是硬件设计相关有的则是软件设计相关。
小结
把握指令集功能的内在联系而不是堆砌它们。
零扩展还是符号扩展 一般来说算数运算是符号扩展逻辑运算是零扩展 溢出检测还是不检测?溢出针对有符号数正数 正数 负数、正数 - 负数 负数…… 算数运算检测溢出逻辑运算、地址运算没必要检测 等于不等于的判断直接复用减法就好了。