Untitled
unknown
plain_text
10 months ago
6.9 kB
17
Indexable
.data
# -------- Fibonacci --------
fibMsg: .asciiz "Fibonacci Numbers:\n"
msgZero: .asciiz " 0: 1\n"
msgOne: .asciiz " 1: 1\n"
colonSpace: .asciiz ": "
newLine: .asciiz "\n"
# -------- Square --------
extraNewline: .asciiz "\n"
# -------- Run Check --------
ascMsg: .asciiz "Run Check: ASCENDING\n"
descMsg: .asciiz "Run Check: DESCENDING\n"
neitherMsg: .asciiz "Run Check: NEITHER\n"
# -------- Word Count --------
wordMsg: .asciiz "Word Count: "
blankLine: .asciiz "\n"
# -------- Reverse String --------
swapMsg: .asciiz "String successfully swapped!\n"
.text
.globl studentMain
studentMain:
# ---------------- Task 1: Fibonacci ----------------
Task1:
la $t1, fib
lw $t0, 0($t1) # fib → $t0
beq $t0, $zero, Task2 # if fib==0 skip
# header
addi $v0,$zero, 4
la $a0, fibMsg
syscall
# 0:1
addi $v0,$zero, 4
la $a0, msgZero
syscall
# 1:1
addi $v0,$zero, 4
la $a0, msgOne
syscall
addi $s0, $zero, 1 # prev = 1
addi $s1, $zero, 1 # beforeThat = 1
addi $s2, $zero, 2 # n = 2
FibLoop:
slt $t4, $t0, $s2
bne $t4, $zero, endFib
# cur = prev + beforeThat
add $s3, $s0, $s1
# print index
addi $v0, $zero, 1
add $a0, $zero, $s2
syscall
# ": "
addi $v0, $zero, 4
la $a0, colonSpace
syscall
# cur
addi $v0, $zero, 1
add $a0, $zero, $s3
syscall
# newline
addi $v0, $zero, 4
la $a0, newLine
syscall
# update
add $s1, $zero, $s0 # beforeThat = prev
add $s0, $zero, $s3 # prev = cur
addi $s2,$s2,1 # n++
j FibLoop
endFib:
addi $v0, $zero, 4
la $a0, newLine
syscall
# ---------------- Task 2: Square ----------------
Task2:
la $t1, square
lw $s0, 0($t1) # square flag
la $t1, square_size
lw $s1, 0($t1) # square size
la $t1, square_fill
lb $s2, 0($t1) # fill char
beq $s0, $zero, Task3 # skip if square==0
addi $s3, $zero, 0 # row = 0
RowLoop:
slt $t0, $s3, $s1
beq $t0, $zero, EndRows
beq $s3, $zero, BorderRow
addi $t1, $s1, -1
beq $s3, $t1, BorderRow
MiddleRow:
addi $t2, $zero, 124 # '|'
add $s4, $zero, $t2
add $s5, $zero, $s2
j PrintRow
BorderRow:
addi $t2, $zero, 43 # '+'
add $s4, $zero, $t2
addi $t3, $zero, 45 # '-'
add $s5, $zero, $t3
PrintRow:
addi $t4, $zero, 1
slt $t5, $t4, $s1
beq $t5, $zero, JustRight
# left border
addi $v0, $zero, 11
add $a0, $zero, $s4
syscall
# mids
addi $t6, $zero, 1
MidLoop:
addi $t7, $s1, -1
slt $t8, $t6, $t7
beq $t8, $zero, MidDone
addi $v0, $zero, 11
add $a0, $zero, $s5
syscall
addi $t6, $t6, 1
j MidLoop
MidDone:
JustRight:
# right border
addi $v0, $zero, 11
add $a0, $zero, $s4
syscall
# newline
addi $v0, $zero, 4
la $a0, newLine
syscall
addi $s3, $s3, 1
j RowLoop
EndRows:
addi $v0, $zero, 4
la $a0, newLine
syscall
# ---------------- Task 3: Run Check ----------------
Task3:
la $t0, runCheck
lw $t0, 0($t0)
beq $t0, $zero, Task4
la $t1, intArray_len
lw $t1, 0($t1) # len
slti $t2, $t1, 2
bne $t2,$zero, PrintBoth
addi $s0,$zero,1 # asc=1
addi $s1,$zero,1 # desc=1
la $t3, intArray
addi $t4,$zero,1 # i=1
ChkLoop:
slt $t5,$t1,$t4
bne $t5,$zero, EndChk
sll $t6,$t4,2
add $t7,$t3,$t6
lw $t8,0($t7) # arr[i]
addi $t6,$t6,-4
add $t7,$t3,$t6
lw $t9,0($t7) # arr[i-1]
slt $t2,$t8,$t9
beq $t2,$zero, SkipAsc
addi $s0,$zero,0
SkipAsc:
slt $t2,$t9,$t8
beq $t2,$zero, SkipDesc
addi $s1,$zero,0
SkipDesc:
addi $t4,$t4,1
j ChkLoop
EndChk:
bne $s0,$zero, DoAsc
j DoDescChk
DoAsc:
addi $v0,$zero,4
la $a0, ascMsg
syscall
DoDescChk:
bne $s1,$zero, DoDesc
j DoNeither
DoDesc:
addi $v0,$zero,4
la $a0, descMsg
syscall
j RCBlank
DoNeither:
addi $v0,$zero,4
la $a0, neitherMsg
syscall
j RCBlank
PrintBoth:
addi $v0,$zero,4
la $a0, ascMsg
syscall
addi $v0,$zero,4
la $a0, descMsg
syscall
RCBlank:
addi $v0,$zero,4
la $a0, blankLine
syscall
# ---------------- Task 4: Word Count ----------------
Task4:
la $t0, countWords
lw $t0, 0($t0)
beq $t0, $zero, Task5
la $t1, str
addi $s0,$zero,0 # count=0
addi $s1,$zero,0 # inWord=0
StrLoop:
lb $t2,0($t1)
beq $t2,$zero, EndStr
addi $t3,$zero,32 # ' '
beq $t2,$t3, NotWord
addi $t3,$zero,10 # '\n'
beq $t2,$t3, NotWord
bne $s1,$zero, InWord
addi $s0,$s0,1
addi $s1,$zero,1
j NextCh
NotWord:
addi $s1,$zero,0
InWord:
NextCh:
addi $t1,$t1,1
j StrLoop
EndStr:
addi $v0,$zero,4
la $a0, wordMsg
syscall
addi $v0,$zero,1
add $a0,$zero,$s0
syscall
addi $v0,$zero,4
la $a0, blankLine
syscall
addi $v0,$zero,4
la $a0, blankLine
syscall
# ---------------- Task 5: Reverse String ----------------
Task5:
la $t0, revString
lw $t0, 0($t0)
beq $t0,$zero, Done
la $s0, str # base
addi $s1,$zero,0 # head
addi $s2,$zero,0 # tail
FindTail:
add $t1,$s0,$s2
lb $t2,0($t1)
beq $t2,$zero, TailFound
addi $s2,$s2,1
j FindTail
TailFound:
addi $s2,$s2,-1
SwapLoop:
slt $t3,$s1,$s2
beq $t3,$zero, EndSwap
add $t4,$s0,$s1
lb $t5,0($t4)
add $t6,$s0,$s2
lb $t7,0($t6)
sb $t7,0($t4)
sb $t5,0($t6)
addi $s1,$s1,1
addi $s2,$s2,-1
j SwapLoop
EndSwap:
addi $v0,$zero,4
la $a0, swapMsg
syscall
addi $v0,$zero,4
la $a0, blankLine
syscall
# ---------------- Done ----------------
Done:
jr $ra
Editor is loading...
Leave a Comment