Professional Documents
Culture Documents
if_pocetok:
z = -z;
sub $t0, $zero, $t0
}
nadvor_od_if:
add $a0, $t0, $zero
li $v0, 1
printf("%d", z);
syscall
li $v0, 10
return 0; syscall
}
Пример 3: Читаме низа од знаци. Со циклус го изминуваме секој знак додека не стигнеме до
крајот, т.е. до ‘\0’. Секој знак го зголемуваме за 3 и го запишуваме назад. Печатиме.
la $t0, t
ciklus:
lbu $t1, 0($t0)
beq $t1, $zero, ciklus_kraj #ako e = ’\0’ izlezi
while(*t0 != '\0') {
addiu $t1, $t1, 3
sb $t1, 0($t0)
*t0 += 3;
addi $t0, $t0, 1
j ciklus
t0++;
} ciklus_kraj:
#la $a0, t
li $v0, 4
syscall
li $v0, 10
fputs(t, stdout); syscall
return 0;
}
Задачи
Задача 1: Разгледајте ги примерите и извршете ги чекор по чекор.
Задача 2: Внесете број од тастатура. Ако бројот се наоѓа во интервалот [-5, 105) или е
поголем од 105050 или пак е помал или еднаков со -70999, тогаш на екран напишете
„во интервал“. Во спротивно, напишете „надвор од интервал“.
.data
interval: .asciiz “vo interval”
nadvor: .asciiz “nadvor od interval”
.text
li $v0,5
syscall
#procitaj broj
add $t0, $v0, $zero #t0 e procitaniot broj
slti $t1, $t0, -5 #1 ako $t0<-5, 0 ako e >=-5
addi $s0, $zero, 1 #$s0=1
beq $t1, $s0, proverka1
slti $t1, $t0, 105 #1 ako $t0<105, 0 ako e >=105
beq $t1, $s0, pecati
li $t1, 105050
slt $t1, $t1, $t0 #1 ako 105050<t0, 0 ako >=t0
beq $t1, $s0, pecati
beq $t1, $zero, inaku
proverka1:
li $t1, -70999
slt $t2, $t1, $t0 #1 ako -70999<$t0, 0 ako e >=t0
beq $t2, $zero, pecati
beq $t2, $s0, inaku
pecati:
la $a0, interval
li $v0, 4
syscall
j kraj
inaku:
la $a0, nadvor
li $v0, 4
syscall
kraj:
li $v0, 10
syscall
Забелешки:
-Операциите помало, поголемо, помало или еднакво и поголемо или еднакво потребно
е да ги испрограмирате со помош на инструкциите, slt, slti, beq и bne
-Некои од константите зафаќаат повеќе од 16 бита.
Задача 3: Да се напише програма која чита два броја b1 и b2 (b1 < b2) и ја печати на
екран сумата на сите броеви во опсегот од b1 до b2 кои при делење со бројот 4 имаат
остаток 1.
.text
li $v0, 5
syscall
add $t0, $v0, $zero
li $v0, 5
syscall
add $t1, $v0, $zero
li $s0, 0
beq $t0, $t1, kraj
addi $s1, $zero, 1
ciklus:
beq $t0, $t1, kraj
addi $t2, $zero, 4
div $t0, $t2
mfhi $t3
beq $t3, $s1, dodadi
addi $t0, $t0, 1
j ciklus
dodadi:
add $s0, $s0, $t0
add $t0, $t0, 1
j ciklus
kraj:
add $a0, $s0, $zero
li $v0, 1
syscall
li $v0, 10
syscall