-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchoose_word.asm
78 lines (66 loc) · 1.8 KB
/
choose_word.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
.macro choose(%size)
pushStack($t7)
pushStack($t0)
pushStack($t1)
pushStack($t2)
pushStack($a0)
pushStack($a1)
pushStack($a2)
pushStack($a3)
add $t7,$0,%size # sizeyi t7 ye kaydediyorum
la $t1,sizecur
lw $t1,sizecur
#kontrol ediyorum ( size <=100) sagliyor mu
li $t2,101
slt $t2,$t7,$t2
blez $t2,resize # $t2=0 size >100
j RanDom
resize: # sizem 100 den buyuk oldugunda size=100 olsun
li $t7,100
RanDom:
la $a2,arr
move $a1,$t7 #0'dan boyuta ayarlanan aralık maksimim boyut 100 olabilir anca
li $v0,42
# rastgele sayı üretir ve onu $a0 içine koyar
syscall
beq $t1,$t7,End #burada kontol ediyoruz
li $t0,0 # count 0
control:
beq $t0,$t1,Exit
lw $a3,0($a2)
bne $a0,$a3,incre
j RanDom
incre:
addi $a2,$a2,4
addi $t0,$t0,1
j control
#a1 ramdom numarasını kaydet
Exit:
li $t2,4
mult $t2,$t0
mflo $t2
sw $a0,($a2) # save -> (a$2)
sub $a2,$a2,$t2 # $a2 = $a2- 4*($t0)
# indexsimi artırıyorum
addi $t1,$t1,1
sw $t1,sizecur
move $v0,$a0 # v0 i kaydediyorum
j end_marco
End:
li $v0,10
syscall
end_marco:
popStack($a3)
popStack($a2)
popStack($a1)
popStack($a0)
popStack($t2)
popStack($t1)
popStack($t0)
popStack($t7)
.end_macro
.data
#Ssecilen rasgele sayiyi kaydediyoruz
arr: .word 0:100
# secilen rasgele sayinin dizi boyutu
sizecur:.word 0:100