zlicz/counter.S
2025-03-11 11:20:41 +00:00

32 lines
1.2 KiB
ArmAsm

.text
.align 2
.globl _start
_start:
la t0, sentence # Load the address of sentence into t0
read_str:
lbu t1, 0(t0) # Load unsigned byte from sentence into t1
beq t1, zero, read_str_done # If end of string (\0), exit loop
la a0, match # Load address of match into a0
la s0, out # Load address of out into s0
iteruj_match:
lbu a1, 0(match) # Load unsigned byte from match into a1
beq a1, zero, done_match # If end of match string (\0), exit inner loop
bne t1, a1, 1f # If t1 != a1, skip increment
lbu s10, 0(out) # Load current counter value from out into s10
addi s10, s10, 1 # Increment counter
sb s10, 0(out) # Store updated counter back to out
1:
j iteruj_match # Jump back to start of inner loop
done_match:
addi t0, t0, 1 # Increment pointer to the next character in sentence
j read_str # Jump back to start of outer loop
read_str_done:
ebreak # End program