赞
踩
本篇基于《计算机组成与设计:硬件、软件》和其他博客资料(链接放在文章尾部),供本人学习记录用,若有错漏欢迎指正
MIPS指令集,就是计算机的“方言”手册,通过这些指令来操作计算机。那么,指令在计算机中是如何表示的呢?
指令在计算机内部是以若干或高或低的电信号的序列表示的,并且在形式上和数的表示相同。实际上,指令的各部分都可以看做一个独立的数,将这些数拼接在一起就形成了指令。
讲具体指令前,要先讲一下寄存器。几乎所有的指令都要用到寄存器,想象一下,如果你要执行加法操作,是不是要传值到计算机,然后还要把它们加起来然后传回结果地址处,这就要用到寄存器去存它们的值和结果,其他操作也类似,所以寄存器至关重要。
MIPS 包含32个通用寄存器 ($0-$31均为32 位)
例子:
C语言:f=(g+h)-(i+j);
变量f,g,g,i,j分别分配给寄存器$s0,$s1,$s2,$s3,$s4
MIPS代码:
add $t0,$s1,$s2 #$to=g+h
add $t1,$s3,$s4 #$t1=i+j
sub $s0,$t0,$t1 #f=(g+h)-(i+j)
C语言:A[300]=h+A[300];
A的基地址放在$t1,h放在$s2
MIPS代码:
lw $t0,1200($t1) #取A[300]的值,由于系统按照字节寻址,而且这里默认数组为int型,故300*4
add $t0,$s2,$t0 #h+A[300]
sw $t0,1200($t1) #计算结果写回A[300]的位置
C语言:while(save[i]==k)i+=1;
i,k存在$s3,$s5,save基地址存在$s6
MIPS编码:
LOOP:sll $t1,$s3,2 #i*4
add $t1,$t1,$s6
lw $$t0,0($t1) #$t0=save[i]
bne $t0,$s5,Exit
addi $s3,$s3,1 #i=i+1
j LOOP
Exit:
这个嵌套循环的例子需要好好看看:(可以有多种写法,但这种是比较规范的)
以下计算阶乘的递归例子用到了 “栈”
int fact(int n) { if(n<1)return(1); else return(n*fact(n-1)); } n对应$a0,由于要反复用到n且改变其值,故要在栈中保存它,还要保存返回地址 fact: addi $sp,$sp,-8 #为两个值预留栈内空间 sw $ra,4($sp) #$ra用于记录返回地址,保存返回地址到栈中 sw $a0,0($sp) #保存a slti $t0,$a0,1 #if(n<1) beq $t0,$zero,$L1 #if(n>=1)go to L1 addi $v0,$zero,1 #return 1 addi $sp,$sp,8 #pop栈内值 jr $ra #跳转到返回地址 L1: addi $a0,$a0,-1 #if(n>=1)n-1 jal fact #递归调用fact(n-1) lw $a0,0($sp) #恢复n值 lw $ra,4($sp) #恢复返回地址 addi $sp,$sp,8 #pop栈内值 mul $v0,$a0,$v0 #rreturn n*fact(n-1) jr $ra #跳到返回地址
如上图所示,主要有四种寻址模式:
一般常数比较短,适用于16位字段,比如 lui 指令能将16位立即数常量存放到寄存器的高16位,低16位用0填充。但是, 如果想把32位常量加载到寄存器怎么办?
首先,可以使用 lui 加载高16位,再用 ori 指令把低16位插入到寄存器。例子如下:
首先,需要知道PC寄存器里放什么,PC寄存器里一般存放当前运行的指令地址(其实更应该叫指令地址寄存器),这个特点对条件分支很有利。
PC寄存器解决了分支指令地址大小的问题,原本条件分支地址最多16位字段,如下图,意味着任何程序不能大于2的16次方,用了PC相对寻址,既解决了地址过小问题,又由于PC包含当前指令地址,能满足条件分支跳转到附近指令的需求,故采用它是一个理想选择。
插入一个无条件跳转到分支目标地址的指令,把分支 指令中的条件变反以决定是否跳过该指令。
这听起来很怪, 因为 u 代表无符号数,这意味加法操作不会产生溢出异常,然而和 addi 、slti 、sltiu 指令类似,16位立即数字段要符号扩展为32位。
通过粗略的学习完这部分内容,我比较深切的感受是;
太神奇了吧!一门小小的“方言”竟然蕴含这么多巧思和独到设计思想,把原本迷雾一般的计算机硬件操作变得清晰可执行,真是万物皆可‘0101’啊!令人头大的0101的电信号跳跃变成可阅读的优美代码真是Amazing~
本人才疏学浅,目前只学到一点点皮毛,待后面进一步学习后再回来修改补充~
参考的其他写的非常好的文章:
https://blog.csdn.net/qq_41191281/article/details/85933985
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。