Прикреплённый файл «Sort.asm»
Загрузка 1 .data
2 .eqv SZ 20
3 Arr: .space SZ
4 EndArr: .align 2
5 .text
6
7 main: la $t1 Arr
8 la $t2 EndArr
9 input: li $v0 5
10 syscall
11 sw $v0 ($t1)
12 addiu $t1 $t1 4
13 bne $t2 $t1 input
14
15 li $a0 SZ
16 la $a1 Arr
17 jal function
18
19 la $t1 Arr
20 la $t2 EndArr
21 output: li $v0 1
22 lw $a0 ($t1)
23 syscall
24 li $a0 '\n'
25 li $v0 11
26 syscall
27 sw $v0 ($t1)
28 addiu $t1 $t1 4
29 bne $t2 $t1 output
30
31 li $v0 10
32 syscall
33
34 function:
35 # общая подпрограмма
36 # a0 — размер массива
37 # a1 — начало массива
38 # v0 — размер выходного массива (того же самого :)
39 # v1 — начало выходного массива
40 .eqv FP -4 # Смещения в кадре
41 .eqv .RA -8($fp) # для сохраняемых регистров
42 .eqv .S0 -12($fp)
43 .eqv .S1 -16($fp)
44 .eqv .ARR -20($fp) # Смещения в кадре
45 .eqv .SIZE -24($fp) # для локальных переменных
46 .eqv FSIZE -24 # Размер кадра
47 sw $fp FP($sp) # Сохраняем кадр
48 move $fp $sp # Переставляем кадр
49 addiu $sp $sp FSIZE # Переставляем стек
50 sw $ra .RA # Сохраняем регистры
51 sw $s0 .S0
52 sw $s1 .S1
53
54 sw $a0 .SIZE # Размер массива
55 sw $a1 .ARR # Адрес массива
56
57 move $s0 $a0 # Регистры типа $s* не меняются
58 move $s1 $a1 # при вызовах функций
59 fnext: move $a0 $s0
60 move $a1 $s1
61 jal getmin
62 lw $t0 ($v0)
63 lw $t1 ($s1)
64 sw $t0 ($s1)
65 sw $t1 ($v0)
66 addiu $s1 $s1 4
67 addiu $s0 $s0 -4
68 bleu $a0 4 fnext ### TODO ??? A0 или s0?
69
70 lw $v0 .SIZE # Обращаемся к локальным переменным
71 lw $v1 .ARR
72
73 lw $ra .RA # Восстанавливаем регистры
74 lw $s0 .S0
75 lw $s1 .S1
76 move $sp $fp # Восстанавливаем стек
77 lw $fp FP($sp) # Восстанавливаем предыдущий кадр
78 jr $ra
79
80 getmin: # концевая подпрограмма
81 # a0 — размер массива
82 # a1 — начало массива
83 # v0 — адрес минимального элемента
84 lw $t0 ($a1)
85 move $v0 $a1
86 gmnext: addiu $a0 $a0 -4
87 addiu $a1 $a1 4
88 blez $a0 gmfin
89 lw $t1 ($a1)
90 bge $t1 $t0 gmnext
91 move $t0 $t1
92 move $v0 $a1
93 j gmnext
94 gmfin: jr $ra
Прикреплённые файлы
Для ссылки на прикреплённый файл в тексте страницы напишите attachment:имяфайла, как показано ниже в списке файлов. Не используйте URL из ссылки «[получить]», так как он чисто внутренний и может измениться.Вам нельзя прикреплять файлы к этой странице.