Created
March 19, 2020 08:36
-
-
Save TrungNguyen1909/b9d7752ecd27e350f8067d50dbe67ea6 to your computer and use it in GitHub Desktop.
Double a number in ARM
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.section .text | |
.global _start | |
atoi: | |
push {fp, lr} | |
mov fp, sp | |
push {r6, r8, r9, r10} | |
add r2, r0, r1 | |
add r8, r0, #0 | |
mov r10, #0 | |
mov r6, #10 | |
loop_atoi: | |
ldr r9, [r8] | |
and r9, #0xff | |
cmp r9, #0x30 | |
blt end_atoi | |
cmp r9, #0x39 | |
bgt end_atoi | |
sub r9, #0x30 | |
mla r10, r6, r10, r9 | |
add r8, #1 | |
b loop_atoi | |
end_atoi: | |
mov r0, r10 | |
pop {r6, r8, r9, r10} | |
pop {fp, pc} | |
itoa: | |
push {fp, lr} | |
mov fp, sp | |
push {r8, r9, r10} | |
mov r8, #0 | |
mov r9, #0 | |
mov r10, #0 | |
ldr r6, =0x1999999a | |
loop_itoa: | |
mov r4, r0 | |
ldr r2,=0xcccccccd | |
umull r0,r5,r4,r2 | |
mov r0,r5,lsr #3 | |
mov r6, #10 | |
mul r5, r0, r6 | |
sub r8, r4, r5 | |
add r8, r8, #0x30 | |
lsl r10, r10, #8 | |
orr r10, r10, r8 | |
add r9, #1 | |
cmp r0, #0 | |
bne loop_itoa | |
end_itoa: | |
str r10, [r1] | |
mov r0, r9 | |
pop {r8, r9, r10} | |
pop {fp, pc} | |
_start: | |
push {fp, lr} | |
mov fp, sp | |
sub sp, sp, #16 | |
mov r0, #0 | |
mov r1, sp | |
mov r2, #4 | |
mov r7, #3 | |
swi 0x0 | |
mov r1, r0 | |
mov r0, sp | |
bl atoi | |
lsl r0, r0, #1 | |
mov r1, sp | |
bl itoa | |
add r1, sp, r0 | |
mov r2, #0xa | |
str r2, [r1] | |
mov r1, sp | |
add r2, r0, #1 | |
mov r0, #1 | |
mov r7, #4 | |
swi 0x0 | |
mov r0, #0 | |
mov r7, #1 | |
swi 0x0 | |
hlt | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment