###### tags: `110-2學校上課` # mips instruction set ## 整數系統 ### addi addiu 基本用法:addi $a0,$a1,數字 ```cpp= int a0,a1; a0 = a1+數字 ``` ### add addu 基本用法:addi $a0,$a1,$a2 ```cpp= int a0,a1,a2; a0 = a1+a2 ``` 兩者差異:溢位是否會錯誤 ### beq bne blt bgt 基本用法:beq $a0,$a1,標籤 ```cpp= int a0,a1,a2; if (狀態) goto 標籤 ``` ### beq bne blt bgt 基本用法:beq $a0,$a1,標籤 ```cpp= int a0,a1,a2; if (狀態) goto 標籤 ``` ### slt stli 比較設定 基本用法: slt $a0,$a1,$a2 ```cpp= int a0,a1,a2; a0 = a1<a2 ``` ## 小數系統 ### add.s add.d mul.s mul.d sub.s sub.d 基本用法:addi $f0,$a=f1,數字 ```cpp= float or double a0,a1; a0 = a1+數字 ``` ### beq bne blt bgt 基本用法:beq $a0,$a1,標籤 ```cpp= int a0,a1,a2; if (狀態) goto 標籤 ``` ### cvt.d.s cvt.s.d 基本用法:cvt.d.s $f0,$f1,$f2 double to float or double to float ### c.le.s c.le.d 比較小數 基本用法: slt $f1,$f2 ```cpp= double or float a1,a2; 站存器 = a1<a2 ``` ### bc1t 基本用法bc1t 標籤 佔存器=1 跳到標籤 ## insert sort ```mips .data array :.word 1,3,5,7,9,2,4,6,8,10,71,2,3,4,5,6,7,8,9,10 .text main: la $s0,array addi $s1,$0,1 for: beq $s1,20,exit addi $s2,$0,0 while: beq $s2,$s1,BREAK sll $s3,$s1,2 sll $s4,$s2,2 add $s5,$s0,$s3 add $s6,$s0,$s4 lw $s5,($s5) lw $s6,($s6) blt $s5,$s6,insert addi $s2,$s2,1 j while insert: sll $s3,$s1,2 add $s5,$s0,$s3 lw $s7,($s5) addi $t0,$s1,0 while2: beq $s2,$s1,end sll $s3,$s1,2 addi $s4,$s1,-1 sll $s4,$s4,2 add $s5,$s0,$s3 add $s6,$s0,$s4 lw $s6,($s6) sw $s6,($s5) addi $s1,$s1,-1 j while2 end: sll $s3,$s1,2 add $s5,$s0,$s3 sw $s7,($s5) add $s1,$0,$t0 BREAK: addi $s1,$s1,1 j for exit: ``` ## select sort ```mips .data array :.word 1,3,5,7,9,2,4,6,8,10 sort:.space 40 ban:.space 40 .text main: la $s0,array la $s6,sort addi $s1,$0,0 for: beq $s1,10,exit addi $s2,$0,0 addi $s5,$0,9999999 while: beq $s2,10,BREAK sll $s3,$s2,2 add $s4,$s0,$s3 lw $s4,($s4) bgt $s4,$s5,less move $s5,$s4 move $t5,$s2 less: addi $s2,$s2,1 j while BREAK: sll $s7,$s1,2 add $s7,$s7,$s6 sw $s5,($s7) sll $s3,$t5,2 add $t6,$s0,$s3 addi $t4,$0,9999999 sw $t4,($t6) addi $s1,$s1,1 j for exit: ```