SYSEXIT = 1
SYSREAD = 3
SYSWRITE = 4
STDIN = 0
STDOUT = 1

num_length = 256
word_length = 4
buf_length = num_length * 2
num_words = num_length / word_length
buf_words = buf_length / word_length

.global main

.bss
num1: .space num_length
num2: .space num_length
result: .space buf_length

.text
main:
loop:
mov r7, #SYSREAD
mov r0, #STDIN
ldr r1, =num1
mov r2, #buf_length
swi 0x0

cmp r0, #buf_length
blt end

ldr r8, =num1
ldr r9, =num2
ldr r10, =result

eor r0, r0, r0

eor r4, r4, r4

zero:
str r0, [r10, r4, lsl#2]
add r4, r4, #1
cmp r4, #buf_words
blt zero

eor r4, r4, r4

loop1:
eor r11, r11, r11
eor r12, r12, r12

eor r2, r2, r2

eor r5, r5, r5

loop2:
ldr r0, [r8, r4, lsl#2]
ldr r3, [r9, r5, lsl#2]
umull r0, r1, r0, r3

msr apsr_nzcvq, r11
adcs r0, r0, r2
mrs r11, apsr

mov r2, r1
add r6, r4, r5

msr apsr_nzcvq, r12
ldr r1, [r10, r6, lsl#2]
adcs r1, r0, r1
str r1, [r10, r6, lsl#2]
mrs r12, apsr

add r5, r5, #1
cmp r5, #num_words
blt loop2

add r6, r6, #1

msr apsr_nzcvq, r11
adc r2, r2, #0

msr apsr_nzcvq, r12
ldr r1, [r10, r6, lsl#2]
adc r1, r1, r2
str r1, [r10, r6, lsl#2]

add r4, r4, #1
cmp r4, #num_words
blt loop1

mov r7, #SYSWRITE
mov r0, #STDOUT
ldr r1, =result
mov r2, #buf_length
swi 0x0

b loop

end:
mov r7, #SYSEXIT
mov r0, #0
swi 0x0
