Kodi:
.data
result: .space 6
str: .ascii "0\n"
prt: .asciiz "The sum is "
prompt: .asciiz "Input the two decimal number [0-15], each on separate line:\n"
.globl main
.text
main:
sub $sp, $sp, 4
sw $ra, 0($sp)
################
# Pjesa 1 #
################
#-----------------# Prompt perdoruesin per nje vlere
la $a0, prompt
addi $v0, $0, 4
syscall
#------------------# Lexo dy numrat
addi $v0, $0, 5
syscall
add $t0, $v0, $0
#-------------------
addi $v0, $0, 5
syscall
add $t1, $v0, $0
#------------------#
################
# Pjesa 2 #
################
sll $s0, $t0, 31
srl $s0, $s0, 31 # $t2 eshte biti 31 i numrit te pare
sll $s1, $t0, 30
srl $s1, $s1, 31 # $t3 eshte biti i 30
sll $s2, $t0, 29
srl $s2, $s2, 31 # $t4 eshte biti i 29
sll $s3, $t0, 28
srl $s3, $s3, 31 # $t5 eshte biti i 28
#---Mbaron numri i pare fillon i dyti
sll $s4, $t1, 31
srl $s4, $s4, 31 # $t6 eshte biti 31 i te dytit
sll $s5, $t1, 30
srl $s5, $s5, 31 # $t7 eshte biti i 30
sll $s6, $t1, 29
srl $s6, $s6, 31 # $t8 eshte biti i 29
sll $s7, $t1, 28
srl $s7, $s7, 31 # $t9 eshte biti i 28
#--Therresim adder1 me 3 parametra
add $a0, $s0, $0 # fut 2 bitet dhe carry-in ne a0, a1, a2 per ti kaluar ne subroutine
add $a1, $s4, $0
add $a2, $0, $0
jal adder1 # Merr shumen e pare dhe Carry-Out
add $s0, $v0, $0 #-- Ne s0 shuma e pare
add $s4, $v1, $0
#-----------------
add $a0, $s1, $0
add $a1, $s5, $0
add $a2, $s4, $0
jal adder1 # Merr shumen e dyte dhe Carry-Out
add $s1, $v0, $0 #-- Ne s1 shuma e dyte
add $s5, $v1, $0
#-----------------
add $a0, $s2, $0
add $a1, $s6, $0
add $a2, $s5, $0
jal adder1 # Merr shumen e trete dhe Carry-Out
add $s2, $v0, $0 #-- Ne s2 shuma e trete
add $s6, $v1, $0
#-----------------
add $a0, $s3, $0
add $a1, $s7, $0
add $a2, $s6, $0
jal adder1 # Merr shumen e katert dhe Carry-Out
add $s3, $v0, $0 #-- Ne s3 shuma e katert
add $s7, $v1, $0
j print
#################
# Pjesa 3 #
#################
######## Procedura -- NenRutina adder1
adder1:
addi $sp, $sp, -4
sw $ra, 0($sp)
#----------------
xor $t1, $a0, $a1 # $t1 = a xor b
xor $t1, $t1, $a2 # $t1 = $t1 xor carryIn
#--- Mbaron punen me shumen
and $t8, $a1, $a2 # $t8 = b and carryIn
and $t9, $a0, $a2 # $t9 = a and carryIn
and $t0, $a0, $a1 # $t0 = a and b
or $t8, $t8, $t9 # $t8 = (b and carryIn) + (a and carryIn)
or $t8, $t8, $t0 # $t8 = (b and carryIn) + (a and carryIn) +
#--- Mbarimi i CarryOut # + (a and b)
add $v0, $t1, $0
add $v1, $t8, $0
#---------------- Nxirr regjistrin $ra nga staku
lw $ra, 0($sp)
addi $sp, $sp, 4
jr $ra
##################
# Pjesa 4 #
##################
#----------------------------
## Printo rezultatin ##
#----------------------------
print:
la $t9, result # Fut adresen e rezultatit ne $t9
la $t8, str # Fut adresen e stringut ne $t8
add $t9, $t9, $t8 # Kemi 8 bite per te bere afishimin
sw $t9, result
la $t9, result
addi $t8, $0, 32 # 32 eshte hapesira ne ASCII
addi $t7, $0, 48 # 48 eshte 0 ne ASCII
add $t0, $s7, $t7
sb $t0, 0($t9)
sb $t8, 1($t9) # hapesire
sb $t8, 2($t9) # e dyfishte
add $t0, $s3, $t7
sb $t0, 3($t9)
add $t0, $s2, $t7
sb $t0, 4($t9)
add $t0, $s1, $t7
sb $t0, 5($t9)
add $t0, $s0, $t7
sb $t0, 6($t9)
sb $0, 7($t9) # null ne fund te stringut si perhere
la $a0, prt
addi $v0, $0, 4
syscall
addi $v0, $0, 4
add $a0, $0, $t9
syscall
#-- Kthe kontrollin
lw $ra, 0($sp)
addi $sp, $sp, 4
jr $ra
Krijoni Kontakt