123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- 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
|