Add evalutaion version for running in mars

This commit is contained in:
unlockable
2024-07-13 22:38:18 +08:00
parent 0c92cfff3d
commit 76fed1406a
3 changed files with 526 additions and 48 deletions

View File

@@ -0,0 +1,419 @@
.text
lui $s0, 0x1001
addi $s0, $s0, 0x60
addi $s1, $zero, 47
sw $s1, 0($s0)
addi $s1, $zero, 0x22c
sw $s1, 4($s0)
addi $s1, $zero, 0xaa4
sw $s1, 8($s0)
addi $s1, $zero, 0xe87
sw $s1, 12($s0)
addi $s1, $zero, 0xf95
sw $s1, 16($s0)
addi $s1, $zero, 0x124c
sw $s1, 20($s0)
addi $s1, $zero, 0x18d0
sw $s1, 24($s0)
addi $s1, $zero, 0x1a04
sw $s1, 28($s0)
addi $s1, $zero, 0x1c49
sw $s1, 32($s0)
addi $s1, $zero, 0x2137
sw $s1, 36($s0)
addi $s1, $zero, 0x2197
sw $s1, 40($s0)
addi $s1, $zero, 0x260b
sw $s1, 44($s0)
addi $s1, $zero, 0x2cc7
sw $s1, 48($s0)
addi $s1, $zero, 0x2e07
sw $s1, 52($s0)
addi $s1, $zero, 0x2f2b
sw $s1, 56($s0)
addi $s1, $zero, 0x3a27
sw $s1, 60($s0)
addi $s1, $zero, 0x3b9f
sw $s1, 64($s0)
addi $s1, $zero, 0x4227
sw $s1, 68($s0)
addi $s1, $zero, 0x4786
sw $s1, 72($s0)
addi $s1, $zero, 0x5e55
sw $s1, 76($s0)
addi $s1, $zero, 0x5f99
sw $s1, 80($s0)
addi $s1, $zero, 0x64ca
sw $s1, 84($s0)
addi $s1, $zero, 0x6e15
sw $s1, 88($s0)
addi $s1, $zero, 0x7345
sw $s1, 92($s0)
addi $s1, $zero, 0x76ee
sw $s1, 96($s0)
addi $s1, $zero, 0x7f32
sw $s1, 100($s0)
addi $s1, $zero, 0x8027
sw $s1, 104($s0)
addi $s1, $zero, 0x80be
sw $s1, 108($s0)
addi $s1, $zero, 0x9213
sw $s1, 112($s0)
addi $s1, $zero, 0x9477
sw $s1, 116($s0)
addi $s1, $zero, 0x9776
sw $s1, 120($s0)
addi $s1, $zero, 0x9d7d
sw $s1, 124($s0)
addi $s1, $zero, 0x9f23
sw $s1, 128($s0)
addi $s1, $zero, 0xa5e5
sw $s1, 132($s0)
addi $s1, $zero, 0xaa22
sw $s1, 136($s0)
addi $s1, $zero, 0xaaf5
sw $s1, 140($s0)
addi $s1, $zero, 0xabb3
sw $s1, 144($s0)
addi $s1, $zero, 0xc308
sw $s1, 148($s0)
addi $s1, $zero, 0xc5a5
sw $s1, 152($s0)
addi $s1, $zero, 0xc8c3
sw $s1, 156($s0)
addi $s1, $zero, 0xc94d
sw $s1, 160($s0)
addi $s1, $zero, 0xd87c
sw $s1, 164($s0)
addi $s1, $zero, 0xd9ca
sw $s1, 168($s0)
addi $s1, $zero, 0xe060
sw $s1, 172($s0)
addi $s1, $zero, 0xe08b
sw $s1, 176($s0)
addi $s1, $zero, 0xe0d8
sw $s1, 180($s0)
addi $s1, $zero, 0xe996
sw $s1, 184($s0)
addi $s1, $zero, 0xf7fe
sw $s1, 188($s0)
# initialize $sp
lui $sp, 0x1001
addi $sp, $sp, 0x7fc
# load digit to mem
lui $s0, 0x1001
addi $s0, $s0, 0x20
#0
addi $s1, $zero, 0x3f
sw $s1, 0($s0)
#1
addi $s1, $zero, 0x6
sw $s1, 4($s0)
#2
addi $s1, $zero, 0x5b
sw $s1, 8($s0)
#3
addi $s1, $zero, 0x4f
sw $s1, 12($s0)
#4
addi $s1, $zero, 0x66
sw $s1, 16($s0)
#5
addi $s1, $zero, 0x6d
sw $s1, 20($s0)
#6
addi $s1, $zero, 0x7d
sw $s1, 24($s0)
#7
addi $s1, $zero, 0x7
sw $s1, 28($s0)
#8
addi $s1, $zero, 0x7f
sw $s1, 32($s0)
#9
addi $s1, $zero, 0x6f
sw $s1, 36($s0)
#A
addi $s1, $zero, 0x77
sw $s1, 40($s0)
#B
addi $s1, $zero, 0x7c
sw $s1, 44($s0)
#C
addi $s1, $zero, 0x58
sw $s1, 48($s0)
#D
addi $s1, $zero, 0x5e
sw $s1, 52($s0)
#E
addi $s1, $zero, 0x79
sw $s1, 56($s0)
#F
addi $s1, $zero, 0x71
sw $s1, 60($s0)
main:
#jal disp_num_in_mem
lui $t0, 0x1001
lw $a0, 0x60($t0)
jal insertion_sort
end:
#jal disp_num_in_mem
j end
disp_num_in_mem:
addi $sp, $sp, -20
sw $ra, 4($sp)
sw $s0, 8($sp)
sw $s1, 12($sp)
sw $s2, 16($sp)
sw $s3, 20($sp)
lui $s0, 0x1001
# s1 = 0x10010010
addi $s1, $s0, 0x10
# s0 = 0x10010060
addi $s0, $s0, 0x60
addi $s2, $zero, 0
# addi $s3, $zero, 20
lw $s3, 0($s0) # s3 is the total count
addi $s0, $s0, 4
display_single_number:
sll $t0, $s2, 2
add $t0, $s0, $t0
lw $a0, 0($t0)
addi $a1, $s1, 0
jal display_number
addi $s2, $s2, 1
sub $t0, $s3, $s2
bgtz $t0, display_single_number
jal display_empty
lw $ra, 4($sp)
lw $s0, 8($sp)
lw $s1, 12($sp)
lw $s2, 16($sp)
lw $s3, 20($sp)
addi $sp, $sp, 20
jr $ra
# ------------------------------------------------------
# a0 is the number to be displayed, a1 is the bcd control addr
display_number:
addi $sp, $sp, -32
sw $ra, 4($sp)
sw $s0, 8($sp)
sw $s1, 12($sp)
sw $s2, 16($sp)
sw $s3, 20($sp)
sw $s4, 24($sp)
sw $s5, 28($sp)
sw $s6, 32($sp)
# s0 is the number to be displayed
addi $s0, $a0, 0
# s1 is the bcd_control addr
addi $s1, $a1, 0
# s2 is the base addr for display digit
lui $s2, 0x1001
addi $s2, $s2, 0x20
# s3 is the counter for a complete scan of 4 digit
# addi $s3, $zero, 0x17c4
addi $s3, $zero, 0xbe2
all_digit_scan_loop:
# s4 is the num being shifted gradually
addi $s4, $s0, 0
# s6 is the enable digit
addi $s6, $zero, 0x100
addi $s5, $zero, 4
single_digit_loop:
# get a digit
andi $t0, $s4, 0xf
# digit * 4 is the memory shift
sll $t0, $t0, 2
add $t0, $s2, $t0
lw $t0, 0($t0)
or $t0, $t0, $s6
sw $t0, 0($s1)
srl $s4, $s4, 4
sll $s6, $s6, 1
addi $t0, $zero, 0x400
wait_time_loop:
addi $t0, $t0, -1
bgtz $t0, wait_time_loop
addi $s5, $s5, -1
bgtz $s5, single_digit_loop
# end of single digit loop
# ** depends on the clock **
# four digit, 328.68us.
# 1s / 328.68us = 3042 = (be2)hex
addi $s3, $s3, -1
bgtz $s3, all_digit_scan_loop
lw $ra, 4($sp)
lw $s0, 8($sp)
lw $s1, 12($sp)
lw $s2, 16($sp)
lw $s3, 20($sp)
lw $s4, 24($sp)
lw $s5, 28($sp)
lw $s6, 32($sp)
addi $sp, $sp, 32
jr $ra
display_empty:
lui $t0, 0x1001
addi $t0, $t0, 0x10
sw $zero, 0($t0)
lui $t0, 0x100
display_empty_wait_loop:
addi $t0, $t0, -1
bgtz $t0, display_empty_wait_loop
jr $ra
# a0 is the total number of numbers needed to be sorted
insertion_sort:
addi $sp, $sp, -12
sw $ra, 4($sp)
sw $s0, 8($sp)
sw $s1, 12($sp)
# la $t0, num_N
# lw $s0, 0($t0) # n in s0
addi $s0, $a0, 0
# li $s1, 1 # i in s1
addi $s1, $zero, 1
item_loop:
# bge $s1, $s0, done_item_loop # if i >= n, done loop
sub $t0, $s0, $s1
blez $t0, done_item_loop
li $a0, 0
addi $a1, $s1, -1
move $a2, $s1
jal binary_search
move $a0, $v0
move $a1, $s1
jal insert
addi $s1, $s1, 1 # i ++
j item_loop
done_item_loop:
lw $ra, 4($sp)
lw $s0, 8($sp)
lw $s1, 12($sp)
addi $sp, $sp, 12
jr $ra
binary_search: # a0: left, a1: right, a2: i
addi $sp, $sp, -20
sw $s0, 4($sp)
sw $s1, 8($sp)
sw $s2, 12($sp)
sw $s3, 16($sp)
sw $ra, 20($sp)
# ble $a0, $a1, in_boundary_binary_search # left <= right, in normal position
sub $t0, $a0, $a1
blez $t0, in_boundary_binary_search
# move $v0, $a0 # now in boundary condition
add $v0, $a0, $zero
j done_binary_search
in_boundary_binary_search:
move $s0, $a0 # in normal situation
move $s1, $a1
move $s2, $a2
add $s3, $s0, $s1 # s3 = mid = (left + right) >> 1
srl $s3, $s3, 1
# jal add_compare_count
# la $t0, num_buff
lui $t0, 0x1001
addi $t0, $t0, 0x64
sll $t1, $s3, 2
add $t1, $t1, $t0
lw $t1, 0($t1) # t1 = v[mid]
sll $t2, $s2, 2
add $t2, $t2, $t0
lw $t2, 0($t2) # t2 = v[n]
# ble $t1, $t2, binary_search_right # v[mid] <= v[n], jump to 'else'
sub $t0, $t1, $t2
blez $t0, binary_search_right
binary_search_left:
addi $a1, $s3, -1
jal binary_search
j done_binary_search
binary_search_right:
addi $a0, $s3, 1
jal binary_search
done_binary_search:
lw $s0, 4($sp)
lw $s1, 8($sp)
lw $s2, 12($sp)
lw $s3, 16($sp)
lw $ra, 20($sp)
addi $sp, $sp, 20
jr $ra
insert: # $a0: int k, $a1: int n
addi $sp, $sp, -12
sw $s0, 4($sp)
sw $s1, 8($sp)
sw $ra, 12($sp)
# la $s0, num_buff # s0 = &v[0]
lui $s0, 0x1001
addi $s0, $s0, 0x64
sll $t0, $a1, 2
add $s2, $s0, $t0
lw $s2, 0($s2) # s2 = tmp = 'pivot' = v[n]
addi $s1, $a1, -1 # s1 = i = n - 1
insert_loop:
# blt $s1, $a0, done_insert_loop # i < k, done loop
sub $t0, $s1, $a0
bltz $t0, done_insert_loop
sll $t0, $s1, 2
add $t0, $s0, $t0 # t0 = &v[i]
lw $t1, 0($t0)
sw $t1, 4($t0)
addi $s1, $s1, -1 # i--
j insert_loop
done_insert_loop:
sll $t0, $a0, 2
add $t0, $s0, $t0
sw $s2, 0($t0) # t0 = &v[k]
lw $s0, 4($sp)
lw $s1, 8($sp)
lw $ra, 12($sp)
addi $sp, $sp, 12
jr $ra

View File

@@ -2,6 +2,7 @@ import random
total_count = random.randint(5, 50)
# total_count = 20
total_count = 47
numbers = list()
for _ in range(total_count):
@@ -30,12 +31,66 @@ for _ in range(total_count):
# 0x969A,
# ]
numbers = [
0x022C,
0x0AA4,
0x0E87,
0x0F95,
0x124C,
0x18D0,
0x1A04,
0x1C49,
0x2137,
0x2197,
0x260B,
0x2CC7,
0x2E07,
0x2F2B,
0x3A27,
0x3B9F,
0x4227,
0x4786,
0x5E55,
0x5F99,
0x64CA,
0x6E15,
0x7345,
0x76EE,
0x7F32,
0x8027,
0x80BE,
0x9213,
0x9477,
0x9776,
0x9D7D,
0x9F23,
0xA5E5,
0xAA22,
0xAAF5,
0xABB3,
0xC308,
0xC5A5,
0xC8C3,
0xC94D,
0xD87C,
0xD9CA,
0xE060,
0xE08B,
0xE0D8,
0xE996,
0xF7FE,
]
with open("gen_num.txt", "w") as fl:
fl.writelines(["0x%04X\n" % x for x in numbers])
with open("gen_num_asm.txt", "w") as fl:
fl.write(
"""lui $s0, 0x4000\naddi $s0, $s0, 0x60\naddi $s1, $zero, %d\nsw $s1, 0($s0)\n"""
% (total_count)
)
for idx, num in enumerate(numbers):
fl.write("addi $s1, $zero, %s\nsw $s1, %d($s0)\n" % (hex(num), 4 * idx))
fl.write("addi $s1, $zero, %s\nsw $s1, %d($s0)\n" % (hex(num), 4 * (idx + 1)))
with open("gen_num_data_mem.txt", "w") as fl:
fl.write(

View File

@@ -1,94 +1,98 @@
addi $s1, $zero, 0x22c
lui $s0, 0x4000
addi $s0, $s0, 0x60
addi $s1, $zero, 47
sw $s1, 0($s0)
addi $s1, $zero, 0xaa4
addi $s1, $zero, 0x22c
sw $s1, 4($s0)
addi $s1, $zero, 0xe87
addi $s1, $zero, 0xaa4
sw $s1, 8($s0)
addi $s1, $zero, 0xf95
addi $s1, $zero, 0xe87
sw $s1, 12($s0)
addi $s1, $zero, 0x124c
addi $s1, $zero, 0xf95
sw $s1, 16($s0)
addi $s1, $zero, 0x18d0
addi $s1, $zero, 0x124c
sw $s1, 20($s0)
addi $s1, $zero, 0x1a04
addi $s1, $zero, 0x18d0
sw $s1, 24($s0)
addi $s1, $zero, 0x1c49
addi $s1, $zero, 0x1a04
sw $s1, 28($s0)
addi $s1, $zero, 0x2137
addi $s1, $zero, 0x1c49
sw $s1, 32($s0)
addi $s1, $zero, 0x2197
addi $s1, $zero, 0x2137
sw $s1, 36($s0)
addi $s1, $zero, 0x260b
addi $s1, $zero, 0x2197
sw $s1, 40($s0)
addi $s1, $zero, 0x2cc7
addi $s1, $zero, 0x260b
sw $s1, 44($s0)
addi $s1, $zero, 0x2e07
addi $s1, $zero, 0x2cc7
sw $s1, 48($s0)
addi $s1, $zero, 0x2f2b
addi $s1, $zero, 0x2e07
sw $s1, 52($s0)
addi $s1, $zero, 0x3a27
addi $s1, $zero, 0x2f2b
sw $s1, 56($s0)
addi $s1, $zero, 0x3b9f
addi $s1, $zero, 0x3a27
sw $s1, 60($s0)
addi $s1, $zero, 0x4227
addi $s1, $zero, 0x3b9f
sw $s1, 64($s0)
addi $s1, $zero, 0x4786
addi $s1, $zero, 0x4227
sw $s1, 68($s0)
addi $s1, $zero, 0x5e55
addi $s1, $zero, 0x4786
sw $s1, 72($s0)
addi $s1, $zero, 0x5f99
addi $s1, $zero, 0x5e55
sw $s1, 76($s0)
addi $s1, $zero, 0x64ca
addi $s1, $zero, 0x5f99
sw $s1, 80($s0)
addi $s1, $zero, 0x6e15
addi $s1, $zero, 0x64ca
sw $s1, 84($s0)
addi $s1, $zero, 0x7345
addi $s1, $zero, 0x6e15
sw $s1, 88($s0)
addi $s1, $zero, 0x76ee
addi $s1, $zero, 0x7345
sw $s1, 92($s0)
addi $s1, $zero, 0x7f32
addi $s1, $zero, 0x76ee
sw $s1, 96($s0)
addi $s1, $zero, 0x8027
addi $s1, $zero, 0x7f32
sw $s1, 100($s0)
addi $s1, $zero, 0x80be
addi $s1, $zero, 0x8027
sw $s1, 104($s0)
addi $s1, $zero, 0x9213
addi $s1, $zero, 0x80be
sw $s1, 108($s0)
addi $s1, $zero, 0x9477
addi $s1, $zero, 0x9213
sw $s1, 112($s0)
addi $s1, $zero, 0x9776
addi $s1, $zero, 0x9477
sw $s1, 116($s0)
addi $s1, $zero, 0x9d7d
addi $s1, $zero, 0x9776
sw $s1, 120($s0)
addi $s1, $zero, 0x9f23
addi $s1, $zero, 0x9d7d
sw $s1, 124($s0)
addi $s1, $zero, 0xa5e5
addi $s1, $zero, 0x9f23
sw $s1, 128($s0)
addi $s1, $zero, 0xaa22
addi $s1, $zero, 0xa5e5
sw $s1, 132($s0)
addi $s1, $zero, 0xaaf5
addi $s1, $zero, 0xaa22
sw $s1, 136($s0)
addi $s1, $zero, 0xabb3
addi $s1, $zero, 0xaaf5
sw $s1, 140($s0)
addi $s1, $zero, 0xc308
addi $s1, $zero, 0xabb3
sw $s1, 144($s0)
addi $s1, $zero, 0xc5a5
addi $s1, $zero, 0xc308
sw $s1, 148($s0)
addi $s1, $zero, 0xc8c3
addi $s1, $zero, 0xc5a5
sw $s1, 152($s0)
addi $s1, $zero, 0xc94d
addi $s1, $zero, 0xc8c3
sw $s1, 156($s0)
addi $s1, $zero, 0xd87c
addi $s1, $zero, 0xc94d
sw $s1, 160($s0)
addi $s1, $zero, 0xd9ca
addi $s1, $zero, 0xd87c
sw $s1, 164($s0)
addi $s1, $zero, 0xe060
addi $s1, $zero, 0xd9ca
sw $s1, 168($s0)
addi $s1, $zero, 0xe08b
addi $s1, $zero, 0xe060
sw $s1, 172($s0)
addi $s1, $zero, 0xe0d8
addi $s1, $zero, 0xe08b
sw $s1, 176($s0)
addi $s1, $zero, 0xe996
addi $s1, $zero, 0xe0d8
sw $s1, 180($s0)
addi $s1, $zero, 0xf7fe
addi $s1, $zero, 0xe996
sw $s1, 184($s0)
addi $s1, $zero, 0xf7fe
sw $s1, 188($s0)