• 实验目的:

结合附件A MIPSsim指令列表,完成下列程序中指令的功能解释,理解程序的执行过程

  • 实验原理:

MIPS 指令可以分为 4 大类:load 和 store、ALU 操作、分支与跳转、浮点操作。

三、实验内容:

Alltest

# load和store指令

.text

main:

ADDIU $r8, $r0, DATA    //将r0和立即数DATA相加存入r8。32位按无符号数操作

LB $r1, 0($r8)           //取字节,在r8寄存器中的对应地址中读出一个字节,经零扩展后,存到r1寄存器中,按有符号数操作

LW $r1, 0($r8)           //取r8寄存器中的字加上16位偏移量存到r1寄存器中

LBU $r1, 0($r8)          //在r8寄存器中的对应地址中,经零扩展后,存到r1寄存器

ADDIU $r8, $r0, BUFFER   //将r0和立即数BUFFER相加存入r8。32位按无符号数操作

SW $r1,0($r8)           //从r1中读取数据按16位偏移量offset 写入寄存器r8

BEQ $r0, $r0, PROG2     //若寄存器r0和寄存器r0的值相等,则转到PROG2语句执行

NOP                   //空操作指令,用于控制时间周期

# 算术运算指令

PROG2:

DADD $r3, $r1, $r2       //双字寄存器加,r1加r2存入r3,按有符号数操作

DMULT $r1, $r2          //双字寄存器乘,,r1乘r2的值,积的低 64 位送 LO, 高 64 位送 HI,按有符号数操作

BEQ $r0, $r0, PROG3     //若寄存器r0和寄存器r0的值相等,则转到PROG3语句执行

NOP                   //空操作指令

# 逻辑运算指令

PROG3:

AND $r3, $r1, $r2        //r1和r2进行与运算,将结果存入r3

ANDI $r3, $r1,0xFFFF0000

BEQ $r0, $r0, PROG4     //若寄存器r0和寄存器r0的值相等,则转到PROG4语句执行

NOP                   //空操作指令

# 控制转移指令

PROG4:

BEQ $r1,$r2,LABEL1      //若寄存器r1和寄存器r2的值相等,则转到LABLE1语句执行

NOP                   //空操作指令

NOP                   //空操作指令

LABEL1:

BGEZ $r1,LABEL2        //若r1大于等于0,则跳转LABEL2

NOP                   //空操作指令

NOP                   //空操作指令

LABEL2:

BGEZAL $r1,LABEL3      //若r1大于等于0转移并链接LABEL3,并将返回

地址(当前的 PC 值)保存到 R31

NOP                   //空操作指令

NOP                   //空操作指令

LABEL3:

ADDIU $r1, $r0, LABEL4   //r0加立即数LABEL4存入r1,32 位,按无符号数操作

JALR $r3, $r1            //无条件转移到 r1给出的地址,并将返回地址 PC+4 保存到 r3

NOP                   //空操作指令

NOP                   //空操作指令

LABEL4:

TEQ $r0, $r0            //如果r0=r0,则自陷

NOP                   //空操作指令

# 数据

.data        //随后定义的数据被存放到数据段

.align 2      // 将下一个数据对准字边界

DATA:

.word 128   //在连续的内存区中存储值为 wl,w2, …, 的 128 个字(32

位)的数

BUFFER:

.word 300   //在连续的内存区中存储值为 wl,w2, …, 的300个字(32

位)的数

pipeline

.text

main:

ADDIU $r8,$r0,num    //将r0和立即数num相加存入r8。32位按无符号数操作

LW $r1, 0($r8)        //取r8寄存器中的字加上16位偏移量存到r1寄存器中

BGEZAL $r1,func    //如果r1大于等于0,则执行func,并将返回地址(当前的 PC 值)保存到 R31

SLL $r0,$r0,0       //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0

SW $r2, 60($r0)     //从r2中读取数据按16位偏移量offset 写入寄存器r0

TEQ $r0,$r0        //如果r0=r0,则自陷

SLL $r0,$r0,0       //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0

func:

ADD $r2,$r1,$r0    //寄存器r1加r0,并将其存入r2

ADDI $r6,$r0,8     //寄存器r0加立即数8,并将其存入r6

loop:

ADDI $r1,$r1,-1     //寄存器r1加立即数-1,并将其存入r1

ADDI $r3,$r0,25     //寄存器r0加立即数25,并将其存入r3

LW  $r4, 60($r6)    //取r6寄存器中的字加上16位偏移量存到r4寄存器中

BEQ $r1,$r0,ret     //若寄存器r1和寄存器r0的值相等,则执行ret跳转指令

SLL $r0,$r0,0       //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0

MUL $r2,$r1,$r2      //寄存器r1乘r2,并将其存入r2

BEQ $r0,$r0,loop     //若寄存器r0和寄存器r0的值相等,则执行loop循环指令

SLL $r0,$r0,0       //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0

ret:

JR $r31            //寄存器r31跳转到PC

SLL $r0,$r0,0       //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0

.data

num: .word 5      //在连续的内存区中存储值为 w0, …,w5 的 5个字(32 位)的数

schedule

.text

main:

ADDIU  $r1,$r0,A    //将r0和立即数A相加存入r1。32位按无符号数操作

LW     $r2,0($r1)    //取r1寄存器中的字加上16位偏移量存到r2寄存器中

ADD    $r4,$r0,$r2         //寄存器r2加r0,并将其存入r4

SW     $r4,0($r1)          //从r1中读取数据按16位偏移量offset 写入寄存器r4

LW     $r6,4($r1)          //取r1寄存器中的字加上16位偏移量存到r6寄存器中

ADD    $r8,$r6,$r1         //寄存器r1加r6,并将其存入r8

MUL    $r12,$r10,$r1          //寄存器r10乘r1,并将其存入r12

ADD    $r16,$r12,$r1          //寄存器r1加r12,并将其存入r16

ADD    $r18,$r16,$r1          //寄存器r1加r16,并将其存入r18

SW     $r18,16($r1)          //从r1中读取数据按16位偏移量offset 写入寄存器r18

LW     $r20,8($r1)           //取r1寄存器中的字加上16位偏移量存到r20寄存器中

MUL    $r22,$r20,$r14       //寄存器r14乘r20,并将其存入r22

MUL    $r24,$r26,$r14       //寄存器r14乘r26,并将其存入r24

TEQ $r0,$r0                 //如果r0=r0,则自陷

.data                       //随后定义的数据被存放到数据段

A:

.word 4,6,8                  //在连续的内存区中存储值为 w4 …,w8 的 8 个字(32 位)的数

afer-schedule

.text

main:

ADDIU  $r1,$r0,A            //将r0和立即数A相加存入r1。32位按无符号数操作

ADD    $r4,$r0,$r2          //寄存器r0加r2,并将其存入r4

LW     $r2,0($r1)           //取r1寄存器中的字加上16位偏移量存到r2寄存器中

SW     $r4,0($r1)           //从r1中读取数据按16位偏移量offset 写入寄存器r4

LW     $r6,4($r1)           //取r1寄存器中的字加上16位偏移量存到r6寄存器中

MUL    $r12,$r10,$r1       //寄存器r1乘r10,并将其存入r12

ADD    $r8,$r6,$r1          //寄存器r1加r6,并将其存入r8

ADD    $r16,$r12,$r1        //寄存器r1加r12,并将其存入r16

LW     $r20,8($r1)          //取r1寄存器中的字加上16位偏移量存到r20寄存器中

ADD    $r18,$r16,$r1        //寄存器r1加r16,并将其存入r18

SW     $r18,16($r1)          //从r1中读取数据按16位偏移量offset 写入寄存器r18

MUL    $r22,$r20,$r14        //寄存器r20乘r14,并将其存入r22

MUL    $r24,$r26,$r14        //寄存器r14乘r26,并将其存入r24

TEQ $r0,$r0                  //如果r0=r0,则自陷

.data

A:

.word 4,6,8                  //在连续的内存区中存储值为 w4, …,w8 的 8 个字(32 位)的数

Branch

.text

main:

ADDI  $r2,$r0,1024        //寄存器r0加立即数1024,并将其存入r2

ADD   $r3,$r0,$r0         //寄存器r3加r0,并将其存入r2

ADDI  $r4,$r0,8           //寄存器r0加立即数8,并将其存入r4

loop:

LW    $r1,0($r2)           //取r2寄存器中的字加上16位偏移量存到r1寄存器中

ADDI  $r1,$r1,1           //寄存器r1加立即数1,并将其存入r1

SW    $r1,0($r2)          //从r2中读取数据按16位偏移量offset 写入寄存器r1

ADDI  $r3,$r3,4           //寄存器r3加立即数4,并将其存入r3

SUB   $r5,$r4,$r3         //寄存器r3减r4,并将其存入r5

BGTZ  $r5,loop           //若r5大于0,则执行loop

ADD   $r7,$r0,$r6         //寄存器r6加r0,并将其存入r7

TEQ   $r0,$r0            //如果r0=r0,则自陷

delayed-branch

.text

main:

ADDI  $r2,$r0,1024         //寄存器r0加立即数1024,并将其存入r2

ADD   $r3,$r0,$r0          //寄存器r3加r0,并将其存入r0

ADDI  $r4,$r0,8            //寄存器r0加立即数8,并将其存入r4

loop:

LW    $r1,0($r2)           //取r2寄存器中的字加上16位偏移量存到r1寄存器中

ADDI  $r3,$r3,4           //寄存器r3加立即数4,并将其存入r3

ADDI  $r1,$r1,1           //寄存器r1加立即数1,并将其存入r1

SUB   $r5,$r4,$r3         //寄存器r4减r3,并将其存入r5

SW    $r1,0($r2)          //从r2中读取数据按16位偏移量offset 写入寄存器r1

BGTZ  $r5,loop           //若r5大于0,则执行loop

ADD   $r7,$r0,$r6         //寄存器r6加r0,并将其存入r7

TEQ   $r0,$r0            //如果r0=r0,则自陷

data_hz

.text

main:

ADDIU $r2,$r0,A       //将r0和立即数A相加存入r2。32位按无符号数操作

ADDIU $r3,$r0,B       //将r0和立即数B相加存入r3。32位按无符号数操作

loop:

LW $r1,0($r2)          //取r2寄存器中的字加上16位偏移量存到r1寄存器中

ADD $r1,$r1,$r3        //寄存器r3加r1,并将其存入r1

SW $r1,0($r2)          //从r2中读取数据按16位偏移量offset 写入寄存器r1

LW $r5,0($r1)          //取r1寄存器中的字加上16位偏移量存到r5寄存器中

ADDI $r5,$r5,10        //寄存器r5加立即数10,并将其存入r5

ADDI $r2,$r2,4         //寄存器r2加立即数4,并将其存入r2

SUB $r4,$r3,$r2        //寄存器r3减r2,并将其存入r4

BGTZ $r4,loop         //若r4大于0,则执行loop

SLL $r0,$r0,0          //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0

TEQ $r0,$r0           //如果r0=r0,则自陷

SLL $r0,$r0,0          //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0

SLL $r0,$r0,0          //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0

.data

A: .word 0, 4, 8                  //在连续的内存区中存储值为 w0,w1, …w4 的 8 个字(32 位)的数

B: .word 2, 1, 0                  //在连续的内存区中存储值为 w2,w1的 0个字(32 位)的数

structure_hz

.text

main:

ADD.D $f2,$f0,$f1         //双精度浮点f0加f1,并将其存入f2

ADD.D $f3,$f0,$f1         //双精度浮点f0加f1,并将其存入f3

ADD.D $f4,$f0,$f1         //双精度浮点f0加f1,并将其存入f4

ADD.D $f5,$f0,$f1         //双精度浮点f0加f1,并将其存入f5

ADD.D $f6,$f0,$f1         //双精度浮点f0加f1,并将其存入f6

ADD.D $f7,$f0,$f1         //双精度浮点f0加f1,并将其存入f7

ADD.D $f8,$f0,$f1         //双精度浮点f0加f1,并将其存入f8

ADD.D $f9,$f0,$f1         //双精度浮点f0加f1,并将其存入f9

TEQ $r0,$r0              //如果r0=r0,则自陷

  • 实验分析:

  

五、实验总结:

通过这次实验我知道了load和store指令的具体例子。LW是装入字,SW是保存字,ALU指令,都是寄存器-寄存器型(RR 型)或立即数型的。DADDU是无符号加,DADDIU是无符号立即加。控制指令的跳转和分支指令。JR是寄存器跳转,BEQZ是等于零时分支。算术运算指令:寄存器加(ADD),立即值加 (ADDI),无符号立即值加(ADDIU),寄存器乘(MUL)。逻辑运算指令与(AND)。CPU 移位指令:按立即值逻辑左移(SLL),分支指令:相等转移BEQ,大于0转移(BGTZ)。跳转指令:寄存器跳转(JR)。自陷指令:等于自陷(TEQ)等。

     

班级 计本19-2 学号   3192060814136   姓名  郭慧颖  同组实验者             

实验名称             解释Alltest              日期 2021 12 2

  • 实验目的:

结合附件A MIPSsim指令列表,完成下列程序中指令的功能解释,理解程序的执行过程

  • 实验原理:

MIPS 指令可以分为 4 大类:load 和 store、ALU 操作、分支与跳转、浮点操作。

三、实验内容:

Alltest

# load和store指令

.text

main:

ADDIU $r8, $r0, DATA    //将r0和立即数DATA相加存入r8。32位按无符号数操作

LB $r1, 0($r8)           //取字节,在r8寄存器中的对应地址中读出一个字节,经零扩展后,存到r1寄存器中,按有符号数操作

LW $r1, 0($r8)           //取r8寄存器中的字加上16位偏移量存到r1寄存器中

LBU $r1, 0($r8)          //在r8寄存器中的对应地址中,经零扩展后,存到r1寄存器

ADDIU $r8, $r0, BUFFER   //将r0和立即数BUFFER相加存入r8。32位按无符号数操作

SW $r1,0($r8)           //从r1中读取数据按16位偏移量offset 写入寄存器r8

BEQ $r0, $r0, PROG2     //若寄存器r0和寄存器r0的值相等,则转到PROG2语句执行

NOP                   //空操作指令,用于控制时间周期

# 算术运算指令

PROG2:

DADD $r3, $r1, $r2       //双字寄存器加,r1加r2存入r3,按有符号数操作

DMULT $r1, $r2          //双字寄存器乘,,r1乘r2的值,积的低 64 位送 LO, 高 64 位送 HI,按有符号数操作

BEQ $r0, $r0, PROG3     //若寄存器r0和寄存器r0的值相等,则转到PROG3语句执行

NOP                   //空操作指令

# 逻辑运算指令

PROG3:

AND $r3, $r1, $r2        //r1和r2进行与运算,将结果存入r3

ANDI $r3, $r1,0xFFFF0000

BEQ $r0, $r0, PROG4     //若寄存器r0和寄存器r0的值相等,则转到PROG4语句执行

NOP                   //空操作指令

# 控制转移指令

PROG4:

BEQ $r1,$r2,LABEL1      //若寄存器r1和寄存器r2的值相等,则转到LABLE1语句执行

NOP                   //空操作指令

NOP                   //空操作指令

LABEL1:

BGEZ $r1,LABEL2        //若r1大于等于0,则跳转LABEL2

NOP                   //空操作指令

NOP                   //空操作指令

LABEL2:

BGEZAL $r1,LABEL3      //若r1大于等于0转移并链接LABEL3,并将返回

地址(当前的 PC 值)保存到 R31

NOP                   //空操作指令

NOP                   //空操作指令

LABEL3:

ADDIU $r1, $r0, LABEL4   //r0加立即数LABEL4存入r1,32 位,按无符号数操作

JALR $r3, $r1            //无条件转移到 r1给出的地址,并将返回地址 PC+4 保存到 r3

NOP                   //空操作指令

NOP                   //空操作指令

LABEL4:

TEQ $r0, $r0            //如果r0=r0,则自陷

NOP                   //空操作指令

# 数据

.data        //随后定义的数据被存放到数据段

.align 2      // 将下一个数据对准字边界

DATA:

.word 128   //在连续的内存区中存储值为 wl,w2, …, 的 128 个字(32

位)的数

BUFFER:

.word 300   //在连续的内存区中存储值为 wl,w2, …, 的300个字(32

位)的数

pipeline

.text

main:

ADDIU $r8,$r0,num    //将r0和立即数num相加存入r8。32位按无符号数操作

LW $r1, 0($r8)        //取r8寄存器中的字加上16位偏移量存到r1寄存器中

BGEZAL $r1,func    //如果r1大于等于0,则执行func,并将返回地址(当前的 PC 值)保存到 R31

SLL $r0,$r0,0       //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0

SW $r2, 60($r0)     //从r2中读取数据按16位偏移量offset 写入寄存器r0

TEQ $r0,$r0        //如果r0=r0,则自陷

SLL $r0,$r0,0       //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0

func:

ADD $r2,$r1,$r0    //寄存器r1加r0,并将其存入r2

ADDI $r6,$r0,8     //寄存器r0加立即数8,并将其存入r6

loop:

ADDI $r1,$r1,-1     //寄存器r1加立即数-1,并将其存入r1

ADDI $r3,$r0,25     //寄存器r0加立即数25,并将其存入r3

LW  $r4, 60($r6)    //取r6寄存器中的字加上16位偏移量存到r4寄存器中

BEQ $r1,$r0,ret     //若寄存器r1和寄存器r0的值相等,则执行ret跳转指令

SLL $r0,$r0,0       //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0

MUL $r2,$r1,$r2      //寄存器r1乘r2,并将其存入r2

BEQ $r0,$r0,loop     //若寄存器r0和寄存器r0的值相等,则执行loop循环指令

SLL $r0,$r0,0       //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0

ret:

JR $r31            //寄存器r31跳转到PC

SLL $r0,$r0,0       //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0

.data

num: .word 5      //在连续的内存区中存储值为 w0, …,w5 的 5个字(32 位)的数

schedule

.text

main:

ADDIU  $r1,$r0,A    //将r0和立即数A相加存入r1。32位按无符号数操作

LW     $r2,0($r1)    //取r1寄存器中的字加上16位偏移量存到r2寄存器中

ADD    $r4,$r0,$r2         //寄存器r2加r0,并将其存入r4

SW     $r4,0($r1)          //从r1中读取数据按16位偏移量offset 写入寄存器r4

LW     $r6,4($r1)          //取r1寄存器中的字加上16位偏移量存到r6寄存器中

ADD    $r8,$r6,$r1         //寄存器r1加r6,并将其存入r8

MUL    $r12,$r10,$r1          //寄存器r10乘r1,并将其存入r12

ADD    $r16,$r12,$r1          //寄存器r1加r12,并将其存入r16

ADD    $r18,$r16,$r1          //寄存器r1加r16,并将其存入r18

SW     $r18,16($r1)          //从r1中读取数据按16位偏移量offset 写入寄存器r18

LW     $r20,8($r1)           //取r1寄存器中的字加上16位偏移量存到r20寄存器中

MUL    $r22,$r20,$r14       //寄存器r14乘r20,并将其存入r22

MUL    $r24,$r26,$r14       //寄存器r14乘r26,并将其存入r24

TEQ $r0,$r0                 //如果r0=r0,则自陷

.data                       //随后定义的数据被存放到数据段

A:

.word 4,6,8                  //在连续的内存区中存储值为 w4 …,w8 的 8 个字(32 位)的数

afer-schedule

.text

main:

ADDIU  $r1,$r0,A            //将r0和立即数A相加存入r1。32位按无符号数操作

ADD    $r4,$r0,$r2          //寄存器r0加r2,并将其存入r4

LW     $r2,0($r1)           //取r1寄存器中的字加上16位偏移量存到r2寄存器中

SW     $r4,0($r1)           //从r1中读取数据按16位偏移量offset 写入寄存器r4

LW     $r6,4($r1)           //取r1寄存器中的字加上16位偏移量存到r6寄存器中

MUL    $r12,$r10,$r1       //寄存器r1乘r10,并将其存入r12

ADD    $r8,$r6,$r1          //寄存器r1加r6,并将其存入r8

ADD    $r16,$r12,$r1        //寄存器r1加r12,并将其存入r16

LW     $r20,8($r1)          //取r1寄存器中的字加上16位偏移量存到r20寄存器中

ADD    $r18,$r16,$r1        //寄存器r1加r16,并将其存入r18

SW     $r18,16($r1)          //从r1中读取数据按16位偏移量offset 写入寄存器r18

MUL    $r22,$r20,$r14        //寄存器r20乘r14,并将其存入r22

MUL    $r24,$r26,$r14        //寄存器r14乘r26,并将其存入r24

TEQ $r0,$r0                  //如果r0=r0,则自陷

.data

A:

.word 4,6,8                  //在连续的内存区中存储值为 w4, …,w8 的 8 个字(32 位)的数

Branch

.text

main:

ADDI  $r2,$r0,1024        //寄存器r0加立即数1024,并将其存入r2

ADD   $r3,$r0,$r0         //寄存器r3加r0,并将其存入r2

ADDI  $r4,$r0,8           //寄存器r0加立即数8,并将其存入r4

loop:

LW    $r1,0($r2)           //取r2寄存器中的字加上16位偏移量存到r1寄存器中

ADDI  $r1,$r1,1           //寄存器r1加立即数1,并将其存入r1

SW    $r1,0($r2)          //从r2中读取数据按16位偏移量offset 写入寄存器r1

ADDI  $r3,$r3,4           //寄存器r3加立即数4,并将其存入r3

SUB   $r5,$r4,$r3         //寄存器r3减r4,并将其存入r5

BGTZ  $r5,loop           //若r5大于0,则执行loop

ADD   $r7,$r0,$r6         //寄存器r6加r0,并将其存入r7

TEQ   $r0,$r0            //如果r0=r0,则自陷

delayed-branch

.text

main:

ADDI  $r2,$r0,1024         //寄存器r0加立即数1024,并将其存入r2

ADD   $r3,$r0,$r0          //寄存器r3加r0,并将其存入r0

ADDI  $r4,$r0,8            //寄存器r0加立即数8,并将其存入r4

loop:

LW    $r1,0($r2)           //取r2寄存器中的字加上16位偏移量存到r1寄存器中

ADDI  $r3,$r3,4           //寄存器r3加立即数4,并将其存入r3

ADDI  $r1,$r1,1           //寄存器r1加立即数1,并将其存入r1

SUB   $r5,$r4,$r3         //寄存器r4减r3,并将其存入r5

SW    $r1,0($r2)          //从r2中读取数据按16位偏移量offset 写入寄存器r1

BGTZ  $r5,loop           //若r5大于0,则执行loop

ADD   $r7,$r0,$r6         //寄存器r6加r0,并将其存入r7

TEQ   $r0,$r0            //如果r0=r0,则自陷

data_hz

.text

main:

ADDIU $r2,$r0,A       //将r0和立即数A相加存入r2。32位按无符号数操作

ADDIU $r3,$r0,B       //将r0和立即数B相加存入r3。32位按无符号数操作

loop:

LW $r1,0($r2)          //取r2寄存器中的字加上16位偏移量存到r1寄存器中

ADD $r1,$r1,$r3        //寄存器r3加r1,并将其存入r1

SW $r1,0($r2)          //从r2中读取数据按16位偏移量offset 写入寄存器r1

LW $r5,0($r1)          //取r1寄存器中的字加上16位偏移量存到r5寄存器中

ADDI $r5,$r5,10        //寄存器r5加立即数10,并将其存入r5

ADDI $r2,$r2,4         //寄存器r2加立即数4,并将其存入r2

SUB $r4,$r3,$r2        //寄存器r3减r2,并将其存入r4

BGTZ $r4,loop         //若r4大于0,则执行loop

SLL $r0,$r0,0          //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0

TEQ $r0,$r0           //如果r0=r0,则自陷

SLL $r0,$r0,0          //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0

SLL $r0,$r0,0          //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0

.data

A: .word 0, 4, 8                  //在连续的内存区中存储值为 w0,w1, …w4 的 8 个字(32 位)的数

B: .word 2, 1, 0                  //在连续的内存区中存储值为 w2,w1的 0个字(32 位)的数

structure_hz

.text

main:

ADD.D $f2,$f0,$f1         //双精度浮点f0加f1,并将其存入f2

ADD.D $f3,$f0,$f1         //双精度浮点f0加f1,并将其存入f3

ADD.D $f4,$f0,$f1         //双精度浮点f0加f1,并将其存入f4

ADD.D $f5,$f0,$f1         //双精度浮点f0加f1,并将其存入f5

ADD.D $f6,$f0,$f1         //双精度浮点f0加f1,并将其存入f6

ADD.D $f7,$f0,$f1         //双精度浮点f0加f1,并将其存入f7

ADD.D $f8,$f0,$f1         //双精度浮点f0加f1,并将其存入f8

ADD.D $f9,$f0,$f1         //双精度浮点f0加f1,并将其存入f9

TEQ $r0,$r0              //如果r0=r0,则自陷

  • 实验分析:

  

五、实验总结:

通过这次实验我知道了load和store指令的具体例子。LW是装入字,SW是保存字,ALU指令,都是寄存器-寄存器型(RR 型)或立即数型的。DADDU是无符号加,DADDIU是无符号立即加。控制指令的跳转和分支指令。JR是寄存器跳转,BEQZ是等于零时分支。算术运算指令:寄存器加(ADD),立即值加 (ADDI),无符号立即值加(ADDIU),寄存器乘(MUL)。逻辑运算指令与(AND)。CPU 移位指令:按立即值逻辑左移(SLL),分支指令:相等转移BEQ,大于0转移(BGTZ)。跳转指令:寄存器跳转(JR)。自陷指令:等于自陷(TEQ)等。

计算机组成原理——指令分析相关推荐

  1. 计算机组成原理(分析计算题解析)内附填空,选择,解答题答案

    目录 关于计算机组成原理的填空,选择以及解答题 1. 2. 3. 1.所以首先将整数和小数部分转化成二进制 2.移动小数点 3.得到二进制存储格式 4. 5. 6. 7. 8. 9. 计算机组成原理( ...

  2. 计算机考研:计算机组成原理考点分析

    在计算机408统考中计算机组成原理占了45分,和数据结构部分同一个比重,以下为大家分析一下计算机组成原理的相关考点,希望能够帮助大家. 统考大纲把计组的考查目标定位为理解单处理器计算机系统中各部件的内 ...

  3. 计算机组成原理指令译码,计算机组成原理实验报告指令译码器.docx

    河北大学计算机组成原理实验报告 实验项目指令译码器成绩 -X实验目的: 理解指令译码器的作用和重要性. 学习设计指令译码器. 实验原理: 指令译码器是计算机控制器屮最重要的部分.所谓组合逻辑控制器就是 ...

  4. 计算机组成原理指令寻址方式,计算机组成原理第四章第4讲指令和数据的寻址方式.ppt...

    <计算机组成原理第四章第4讲指令和数据的寻址方式.ppt>由会员分享,可在线阅读,更多相关<计算机组成原理第四章第4讲指令和数据的寻址方式.ppt(51页珍藏版)>请在装配图网 ...

  5. 计算机组成原理试卷分析,《计算机组成原理与汇编语言》试卷分析报告.doc.docx...

    感谢你的观看 <计算机组成原理与汇编语言>试卷分析报告 现教中心 考试类别成人大专考试科目计算机组成原理与汇编语言试卷代号6142分析人时间 2004.7. 分析报告要包含以下内容:1.覆 ...

  6. 计算机组成原理结果分析与实验体会,计算机组成原理实验报告心得体会.docx

    计算机组成原理实验报告心得体会 实验报告 实验课程名称:计 学院:计算算机机科组学成系原理 专业:计算机科学与技术 指导教师:张 报告人姓名: 学号: 同组人员名单: 学期: 本文 计算机科学系 注: ...

  7. 深入浅出计算机组成原理 指令跳转(自我提升第十八天)

    上节学这个徐文浩的深入浅出计算机组成原理,就吃了大亏,渐渐的就发现了,其实他讲的并不单纯是计算机组成原理,而是讲的汇编语言和单片机,(lll¬ω¬)汗! 菜鸟倒是还好,因为学过单片机的,汇编语言多少了 ...

  8. 计算机组成原理结果分析与实验体会,计算机组成原理实验报告总结(共9篇).doc...

    计算机组成原理实验报告总结(共9篇) 计算机组成原理实验报告总结(共9篇) 计算机组成原理实验报告 计算机组成原理实验报告 福建农林大学计算机与信息学院信息工程类实验报告 系: 计算机科学与技术 专业 ...

  9. mips j指令_计算机组成原理 指令

    CPU 能处理的只有指令,我们写的程序归根结底就是指令,高级语言只有翻译成机器码,即计算机能够识别的指令,才能够被执行. 不同的 CPU 拥有不同的指令集,一般 PC 使用 Intel 的 CPU,i ...

  10. 计算机组成原理试卷分析,计算机组成原理试卷分析.doc

    试卷1312222258 一.单4选1(题下选项可能多个正确,只能选择其中最佳的一项)1. 在一个串行传输系统中,每秒可传输12个字节的数据,其比特率是(????? ) A:8bps B:12bpsC ...

最新文章

  1. 基于pytorch量化感知训练(mnist分类)--浮点训练vs多bit后量化vs多bit量化感知训练效果对比
  2. 利用urllib2实现http post请求源码示例
  3. 文件系统性能测试指标
  4. 在Visual Studio 2010 中使用菱形向导对窗口进行布局
  5. weka 初练之 文本分类
  6. 教你配置支付宝应用网关和授权回调地址
  7. CSDN上传资源时一直提示 请填写资源tag
  8. HDU 2609 最小表示法
  9. 安卓电子书格式_不用电脑,6招教你把手机上的电子书传输到Kindle上
  10. html树状图在线画板,树状思维导图怎样绘制
  11. Davids阅读笔记:《如何阅读一本书》
  12. 【Git】规范化 Git 提交信息 Commitizen
  13. 简化工作和生活的 7 个在线地图制作平台分享
  14. PowerShell 实现批量下载文件
  15. 是时候来一发炸裂的开场了!
  16. C# 反射类Assembly用法举例
  17. 什么是 jQuery ?
  18. 简谈RSS——巧用Feed43制作自定义RSS源
  19. 《C专家编程》读书笔记3
  20. 剑指offer——树的子结构

热门文章

  1. 北京上空出现三个太阳?专家:冰晶云对太阳光散射形成“幻日”
  2. HTML+PHP+Mysql登录注册页面
  3. oracle找出两张表中不同的数据
  4. 微信商户、支付宝特殊能力开通
  5. 网页设计配色应用实例剖析——蓝色系
  6. 2017中国产品经理大会总结-我又开始相信可以改变世界了
  7. 报表控件FastReport.NET使用教程:如何在 Visual Studio 中使用报表组件
  8. 档案计算机信息管理系统南天,浅谈档案信息化管理|档案信息化管理系统
  9. 11开根号不用计算机,数学开根号有什么方法?不用计算器
  10. python解析can报文_解析.DBC文件, 读懂CAN通信矩阵,实现车内信号仿真