New Hardware Git

This commit is contained in:
e2hang
2025-12-31 19:35:06 +08:00
commit aca5a8aab8
621 changed files with 254727 additions and 0 deletions

Binary file not shown.

View File

@@ -0,0 +1,41 @@
## mips-cpu-logisim
Logisim实现的五级流水线MIPS CPU
参考自 [华中科技大学MOOC-计算机硬件系统设计](https://www.icourse163.org/course/HUST-1205809816)
## 指令集
实现MIPS指令集子集(24条指令)
- R型移位指令sll、sra、srl
- R型算数指令add、addu、sub
- R型逻辑运算指令and、or、nor
- R型比较指令slt、sltu
- R型分支指令jr
- R型系统调用syscall
> if $v0 = 34 数码管显示$a0值
>
> else 暂停 等待Go按钮按下
- I型分支指令beq、bne
- I型立即数运算指令addi、addiu、slti、andi、ori
- I型访存指令lw、sw
- J型分支指令j、jal
## 运行
- 使用logisim-2.7.1cn.jar或logisim-ita-cn-1204.exe
- 打开相应.circ文件
- 指令存储器加载测试数据镜像test目录下)
- ctrl-k运行
## 运行示例
运行递归斐波拉契程序如下所示:
![img](pic/fib.gif)
## To-Do
- 中断
- 总线
- IO

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 288 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1014 KiB

View File

@@ -0,0 +1,341 @@
#############################################################
#<EFBFBD><EFBFBD><EFBFBD><EFBFBD>j,jal,jrָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ɷֿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>15<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> revise date 2015/12/17 tiger
#############################################################
.text
addi $s1,$zero, 1 #<EFBFBD><EFBFBD><EFBFBD><EFBFBD>j,jal,jrָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ɷֿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>15<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
j jmp_next1
addi $s1,$zero, 1
addi $s2,$zero, 2
addi $s3,$zero, 3
jmp_next1:
j jmp_next2
addi $s1,$zero, 1
addi $s2,$zero, 2
addi $s3,$zero, 3
jmp_next2:
j jmp_next3
addi $s1,$zero, 1
addi $s2,$zero, 2
addi $s3,$zero, 3
jmp_next3:
j jmp_next4
addi $s1,$zero, 1
addi $s2,$zero, 2
addi $s3,$zero, 3
jmp_next4:jal jmp_count
######################################
#<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>Ҫ֧<EFBFBD>ֳ<EFBFBD>addi,sll,add,syscall,srl,sll,sra,beq,j,syscall revise date:2015/12/16 tiger
.text
addi $s0,$zero,1 #<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD>0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>dz<EFBFBD>ʼֵ1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1λ<EFBFBD>ظ<EFBFBD>15<EFBFBD>ε<EFBFBD>ֵ<EFBFBD><EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD>ֵ
addi $s1,$zero,1
sll $s1, $s1, 31 #<EFBFBD>߼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>31λ $s1=0x80000000
###################################################################
# <EFBFBD>߼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><EFBFBD><EFBFBD>
# <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ0x80000000 0x20000000 0x08000000 0x02000000 0x00800000 0x00200000 0x00080000 0x00020000 0x00008000 0x00002000 0x00000800 0x00000200 0x00000080 0x00000020 0x00000008 0x00000002 0x00000000
###################################################################
LogicalRightShift: #<EFBFBD>߼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><EFBFBD>ԣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ1<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>
add $a0,$0,$s1 #display $s1 #<EFBFBD>߼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><EFBFBD>ԣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ1<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>
addi $v0,$0,34 # display hex
syscall # we are out of here.
srl $s1, $s1, 2
beq $s1, $zero, shift_next1
j LogicalRightShift
shift_next1:
add $a0,$0,$s1 #display $s1
addi $v0,$0,34 # display hex
syscall # we are out of here.
###################################################################
# <EFBFBD>߼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><EFBFBD><EFBFBD>
# <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ0x00000004 0x00000010 0x00000040 0x00000100 0x00000400 0x00001000 0x00004000 0x00010000 0x00040000 0x00100000 0x00400000 0x01000000 0x04000000 0x10000000 0x40000000 0x00000000
###################################################################
addi $s1,$zero, 1 # <EFBFBD>߼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><EFBFBD><EFBFBD>
LogicalLeftShift: #<EFBFBD>߼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><EFBFBD>ԣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ1<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>
sll $s1, $s1, 2
add $a0,$0,$s1 #display $s1
addi $v0,$0,34 # display hex
syscall # we are out of here.
beq $s1, $zero, ArithRightShift
j LogicalLeftShift
###################################################################
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><EFBFBD><EFBFBD>
# <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ0x80000000 0xf0000000 0xff000000 0xfff00000 0xffff0000 0xfffff000 0xffffff00 0xfffffff0 0xffffffff
###################################################################
ArithRightShift: #<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><EFBFBD>ԣ<EFBFBD>#<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD>80000000<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾΪF0000000,FF000000,FFF00000,FFFF0000ֱ<EFBFBD><EFBFBD>FFFFFFFF
addi $s1,$zero,1 # <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><EFBFBD><EFBFBD>
sll $s1, $s1, 31 #<EFBFBD>߼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>31λ $s1=0x80000000
add $a0,$0,$s1 #display $s1
addi $v0,$0,34 # display hex
syscall # we are out of here.
sra $s1, $s1, 3 #$s1=0X80000000-->0XF0000000
add $a0,$0,$s1 #display $s1
addi $v0,$0,34 # display hex
syscall # we are out of here.
sra $s1, $s1, 4 #0XF0000000-->0XFF000000
add $a0,$0,$s1 #display $s1
addi $v0,$0,34 # display hex
syscall # we are out of here.
sra $s1, $s1, 4 #0XFF000000-->0XFFF00000
add $a0,$0,$s1 #display $s1
addi $v0,$0,34 # display hex
syscall # we are out of here.
sra $s1, $s1, 4
add $a0,$0,$s1 #display $s1
addi $v0,$0,34 # display hex
syscall # we are out of here.
sra $s1, $s1, 4
add $a0,$0,$s1 #display $s1
addi $v0,$0,34 # display hex
syscall # we are out of here.
sra $s1, $s1, 4
add $a0,$0,$s1 #display $s1
addi $v0,$0,34 # display hex
syscall # we are out of here.
sra $s1, $s1, 4
add $a0,$0,$s1 #display $s1
addi $v0,$0,34 # display hex
syscall # we are out of here.
sra $s1, $s1, 4
add $a0,$0,$s1 #display $s1
addi $v0,$0,34 # display hex
syscall # we are out of here.
#############################################################
#<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD><EFBFBD><EFBFBD>addi,andi,sll,srl,sra,or,ori,nor,syscall LED<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#############################################################
.text
addi $s0,$zero,1
sll $s3, $s0, 31 # $s3=0x80000000
sra $s3, $s3, 31 # $s3=0xFFFFFFFF
addu $s0,$zero,$zero # $s0=0
addi $s2,$zero,12
addiu $s6,$0,3 #<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD><EFBFBD>
zmd_loop:
addiu $s0, $s0, 1 #<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
andi $s0, $s0, 15
#######################################
addi $t0,$0,8
addi $t1,$0,1
left:
sll $s3, $s3, 4 #<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
or $s3, $s3, $s0
add $a0,$0,$s3 # display $s3
addi $v0,$0,34 # system call for LED display
syscall # display
sub $t0,$t0,$t1
bne $t0,$0,left
#######################################
addi $s0, $s0, 1 #<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
addi $t8,$0,15
and $s0, $s0, $t8
sll $s0, $s0, 28
addi $t0,$0,8
addi $t1,$0,1
zmd_right:
srl $s3, $s3, 4 #<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
or $s3, $s3, $s0
addu $a0,$0,$s3 # display $s3
addi $v0,$0,34 # system call for LED display
syscall # display
sub $t0,$t0,$t1
bne $t0,$0,zmd_right
srl $s0, $s0, 28
#######################################
sub $s6,$s6,$t1
beq $s6,$0, exit
j zmd_loop
exit:
add $t0,$0,$0
nor $t0,$t0,$t0 #test nor ori
sll $t0,$t0,16
ori $t0,$t0,0xffff
addu $a0,$0,$t0 # display $t0
addi $v0,$0,34 # system call for LED display
syscall # display
#################################################################################
#<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD>0-15<EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>Ԫ<EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>mars mips<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>Mars Setting<EFBFBD>е<EFBFBD>Memory Configuration<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪCompact<EFBFBD><EFBFBD>data at address 0
#
#################################################################################
.text
sort_init:
addi $s0,$0,-1
addi $s1,$0,0
sw $s0,0($s1)
addi $s0,$s0,1
addi $s1,$s1,4
sw $s0,0($s1)
addi $s0,$s0,1
addi $s1,$s1,4
sw $s0,0($s1)
addi $s0,$s0,1
addi $s1,$s1,4
sw $s0,0($s1)
addi $s0,$s0,1
addi $s1,$s1,4
sw $s0,0($s1)
addi $s0,$s0,1
addi $s1,$s1,4
sw $s0,0($s1)
addi $s0,$s0,1
addi $s1,$s1,4
sw $s0,0($s1)
addi $s0,$s0,1
addi $s1,$s1,4
sw $s0,0($s1)
addi $s0,$s0,1
addi $s1,$s1,4
sw $s0,0($s1)
addi $s0,$s0,1
addi $s1,$s1,4
sw $s0,0($s1)
addi $s0,$s0,1
addi $s1,$s1,4
sw $s0,0($s1)
addi $s0,$s0,1
addi $s1,$s1,4
sw $s0,0($s1)
addi $s0,$s0,1
addi $s1,$s1,4
sw $s0,0($s1)
addi $s0,$s0,1
addi $s1,$s1,4
sw $s0,0($s1)
addi $s0,$s0,1
addi $s1,$s1,4
sw $s0,0($s1)
addi $s0,$s0,1
addi $s1,$s1,4
sw $s0,0($s1)
addi $s0,$s0,1
addi $s1,$s1,4
addi $s0,$s0,1
add $s0,$zero,$zero
addi $s1,$zero,60 #<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
sort_loop:
lw $s3,0($s0)
lw $s4,0($s1)
slt $t0,$s3,$s4
beq $t0,$0,sort_next #<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
sw $s3, 0($s1)
sw $s4, 0($s0)
sort_next:
addi $s1, $s1, -4
bne $s0, $s1, sort_loop
add $a0,$0,$s0 #display $s0
addi $v0,$0,34 # display hex
syscall # we are out of here. DISP: disp $r0, 0
addi $s0,$s0,4
addi $s1,$zero,60
bne $s0, $s1, sort_loop
addi $v0,$zero,50 # system call for exit
syscall # we are out of here.
#MIPS<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD>syscall
jmp_count: addi $s0,$zero, 0
addi $s0,$s0, 1
add $a0,$0,$s0
addi $v0,$0,34 # display hex
syscall # we are out of here.
addi $s0,$s0, 2
add $a0,$0,$s0
addi $v0,$0,34 # display hex
syscall # we are out of here.
addi $s0,$s0, 3
add $a0,$0,$s0
addi $v0,$0,34 # display hex
syscall # we are out of here.
addi $s0,$s0, 4
add $a0,$0,$s0
addi $v0,$0,34 # display hex
syscall # we are out of here.
addi $s0,$s0, 5
add $a0,$0,$s0
addi $v0,$0,34 # display hex
syscall # we are out of here.
addi $s0,$s0, 6
add $a0,$0,$s0
addi $v0,$0,34 # display hex
syscall # we are out of here.
addi $s0,$s0, 7
add $a0,$0,$s0
addi $v0,$0,34 # display hex
syscall # we are out of here.
addi $s0,$s0, 8
add $a0,$0,$s0
addi $v0,$0,34 # display hex
addi $v0,$0,34 # display hex
syscall # we are out of here.
jr $31

View File

@@ -0,0 +1,220 @@
v2.0 raw
20110001
08000c05
20110001
20120002
20130003
08000c09
20110001
20120002
20130003
08000c0d
20110001
20120002
20130003
08000c11
20110001
20120002
20130003
0c000cb8
20100001
20110001
00118fc0
00112020
20020022
0000000c
00118882
12200001
08000c15
00112020
20020022
0000000c
20110001
00118880
00112020
20020022
0000000c
12200001
08000c1f
20110001
00118fc0
00112020
20020022
0000000c
001188c3
00112020
20020022
0000000c
00118903
00112020
20020022
0000000c
00118903
00112020
20020022
0000000c
00118903
00112020
20020022
0000000c
00118903
00112020
20020022
0000000c
00118903
00112020
20020022
0000000c
00118903
00112020
20020022
0000000c
00118903
00112020
20020022
0000000c
20100001
00109fc0
00139fc3
00008021
2012000c
24160003
26100001
3210000f
20080008
20090001
00139900
02709825
00132020
20020022
0000000c
01094022
1500fff9
22100001
2018000f
02188024
00108700
20080008
20090001
00139902
02709825
00132021
20020022
0000000c
01094022
1500fff9
00108702
02c9b022
12c00001
08000c50
00004020
01084027
00084400
3508ffff
00082021
20020022
0000000c
2010ffff
20110000
ae300000
22100001
22310004
ae300000
22100001
22310004
ae300000
22100001
22310004
ae300000
22100001
22310004
ae300000
22100001
22310004
ae300000
22100001
22310004
ae300000
22100001
22310004
ae300000
22100001
22310004
ae300000
22100001
22310004
ae300000
22100001
22310004
ae300000
22100001
22310004
ae300000
22100001
22310004
ae300000
22100001
22310004
ae300000
22100001
22310004
ae300000
22100001
22310004
ae300000
22100001
22310004
22100001
00008020
2011003c
8e130000
8e340000
0274402a
11000002
ae330000
ae140000
2231fffc
1611fff8
00102020
20020022
0000000c
22100004
2011003c
1611fff2
20020032
0000000c
20100000
22100001
00102020
20020022
0000000c
22100002
00102020
20020022
0000000c
22100003
00102020
20020022
0000000c
22100004
00102020
20020022
0000000c
22100005
00102020
20020022
0000000c
22100006
00102020
20020022
0000000c
22100007
00102020
20020022
0000000c
22100008
00102020
20020022
20020022
0000000c
03e00008

View File

@@ -0,0 +1,61 @@
.text
li $s0, 0
li $s1, 10
addi $sp, $zero, 128
loop:
move $a0, $s0
jal fib
move $a0, $v0
li $v0, 34
syscall
add $s0, $s0, 1
bne $s0, $s1, loop
li $v0, 10
syscall
fib:
addi $sp, $sp, -12
sw $ra, 8($sp)
sw $s0, 4($sp)
sw $s1, 0($sp) # $s1 : ret
add $s0, $a0, $zero # $s0: $a0 : n
bne $s0, $zero, elseif
addi $v0, $zero, 0
j return
elseif:
addi $t0, $zero, 1
bne $s0, $t0, else
addi $v0, $zero, 1
j return
else:
addi $a0, $s0, -1
jal fib
add $s1, $v0, $zero
addi $a0, $s0, -2
jal fib
add $s1, $s1, $v0
add $v0, $s1, $zero
j return
return:
lw $s1, 0($sp)
lw $s0, 4($sp)
lw $ra, 8($sp)
addi $sp, $sp, 12
jr $ra

View File

@@ -0,0 +1,38 @@
v2.0 raw
24100000
2411000a
201d0080
00102021
0c000c0c
00022021
24020022
0000000c
22100001
1611fff9
2402000a
0000000c
23bdfff4
afbf0008
afb00004
afb10000
00808020
16000002
20020000
08000c20
20080001
16080002
20020001
08000c20
2204ffff
0c000c0c
00408820
2204fffe
0c000c0c
02228820
02201020
08000c20
8fb10000
8fb00004
8fbf0008
23bd000c
03e00008

View File

@@ -0,0 +1,105 @@
.data
.text
li $s0, 0 # data addr
li $s1, 0 # offset
li $s2, 50 # $s2 : n
li $sp, 4092
nloop:
beq $s2, $zero, exitnloop
add $t0, $s0, $s1
sw $s2, 0($t0)
add $s1, $s1, 4
add $s2, $s2, -1
j nloop
exitnloop:
li $a0, 0
li $a1, 50 #<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
jal sort
li $v0, 10
syscall
#void swap(int v[], int k) {
# int temp = v[k];
# v[k] = v[k+1];
# v[k+1] = temp;
#}
swap:
sll $t1, $a1, 2
add $t1, $t1, $a0 #$t1:v[k]
lw $t0, 0($t1) #$t0:temp
lw $t2, 4($t1) #$t2:v[k+1]
sw $t2, 0($t1)
sw $t0, 4($t1)
jr $ra
sort:
#<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>ֵ
addi $sp, $sp, -20
sw $ra, 16($sp)
sw $s3, 12($sp)
sw $s2, 8($sp)
sw $s1, 4($sp)
sw $s0, 0($sp)
#<EFBFBD>ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
move $s2, $a0 # $s2 : $a0
move $s3, $a1 # $s3 : $a1
move $s0, $zero # $s0 : i
for1tst:
slt $t0, $s0, $s3
beq $t0, $zero, exit1
addi $s1, $s0, -1 # $s1 : j
for2tst:
slti $t0, $s1, 0
bne $t0, $zero, exit2
sll $t1, $s1, 2
add $t2, $s2, $t1 # $t0 : v[j] addr
lw $t3, 0($t2) # $t1 : v[j]
lw $t4, 4($t2) # $t2 : v[j+1]
slt $t0, $t4, $t3
beq $t0, $zero, exit2
move $a0, $s2
move $a1, $s1
jal swap
addi $s1, $s1, -1
j for2tst
exit2:
addi $s0, $s0, 1
j for1tst
exit1:
lw $s0, 0($sp)
lw $s1, 4($sp)
lw $s2, 8($sp)
lw $s3, 12($sp)
lw $ra, 16($sp)
addi $sp, $sp, 20
jr $ra

View File

@@ -0,0 +1,57 @@
v2.0 raw
24100000
24110000
24120032
241d0ffc
12400005
02114020
ad120000
22310004
2252ffff
08000c04
24040000
24050032
0c000c16
2402000a
0000000c
00054880
01244820
8d280000
8d2a0004
ad2a0000
ad280004
03e00008
23bdffec
afbf0010
afb3000c
afb20008
afb10004
afb00000
00049021
00059821
00008021
0213402a
11000010
2211ffff
2a280000
1500000b
00114880
02495020
8d4b0000
8d4c0004
018b402a
11000005
00122021
00112821
0c000c0f
2231ffff
08000c22
22100001
08000c1f
8fb00000
8fb10004
8fb20008
8fb3000c
8fbf0010
23bd0014
03e00008

View File

@@ -0,0 +1,27 @@
.text
#<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1+2+.....+100 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>м<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
li $t0, 101 #n
li $t1, 1 #i
li $t2, 0 #sum
loop:
# $t2 <- $t1 + $t2
move $a0, $t1
move $a1, $t2
jal sum
move $t2, $v0
li $v0, 34
move $a0, $t2
syscall
add $t1, $t1, 1
bne $t0, $t1, loop
li $v0, 10
syscall
sum:
add $v0, $a0, $a1
jr $ra

View File

@@ -0,0 +1,17 @@
v2.0 raw
24080065
24090001
240a0000
00092021
000a2821
0c000c0e
00025021
24020022
000a2021
0000000c
21290001
1509fff7
2402000a
0000000c
00851020
03e00008