**Please Use Arm Assembly Language** I need it in ARM Language not MIPS or Intel
ID: 3850178 • Letter: #
Question
**Please Use Arm Assembly Language**
I need it in ARM Language not MIPS or Intel.
Skeleton
Write an assembly language function named computeMagicNumber which will accept a string (name of an individual as input and compute a magic number from this argument using the following formula N-1 (i 1) xlascii nameliDI %1001 Magic Number In the above formula, ascii namelid) will return the ascii equivalent ofa letter. There is no need for implementing this function in assembly since characters in a string are already represented in ascii. is the remainder operation. name is the string argument passed to the function.Explanation / Answer
Answer:
**********************************************************************************************************************************************************************
Arm assembly code(ARM gcc 5.4):
.LC0:
.ascii "Enter a name:"
.LC1:
.ascii "/abcdefghijklmnopqrstuvwxyz"
main:
stmfd sp!, {fp, lr}
add fp, sp, #4
sub sp, sp, #88
ldr r1, .L10
ldr r0, .L10+4
bl std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
sub r3, fp, #56
mov r1, r3
ldr r0, .L10+8
bl std::basic_istream<char, std::char_traits<char> >& std::operator>><char, std::char_traits<char> >(std::basic_istream<char, std::char_traits<char> >&, char*)
sub r3, fp, #56
mov r0, r3
bl strlen
mov r3, r0
str r3, [fp, #-24]
mov r3, #0
str r3, [fp, #-8]
.L3:
ldr r2, [fp, #-8]
ldr r3, [fp, #-24]
cmp r2, r3
bge .L2
sub r2, fp, #56
ldr r3, [fp, #-8]
add r3, r2, r3
ldrb r3, [r3] @ zero_extendqisi2
mov r0, r3
bl tolower
mov r3, r0
and r1, r3, #255
sub r2, fp, #56
ldr r3, [fp, #-8]
add r3, r2, r3
mov r2, r1
strb r2, [r3]
ldr r3, [fp, #-8]
add r3, r3, #1
str r3, [fp, #-8]
b .L3
.L2:
ldr r3, .L10+12
sub ip, fp, #84
mov lr, r3
ldmia lr!, {r0, r1, r2, r3}
stmia ip!, {r0, r1, r2, r3}
ldmia lr, {r0, r1, r2}
stmia ip, {r0, r1, r2}
mov r3, #0
str r3, [fp, #-12]
mov r3, #0
str r3, [fp, #-16]
.L8:
ldr r2, [fp, #-16]
ldr r3, [fp, #-24]
cmp r2, r3
bge .L4
mov r3, #1
str r3, [fp, #-20]
.L7:
ldr r3, [fp, #-20]
cmp r3, #26
bgt .L5
sub r2, fp, #56
ldr r3, [fp, #-16]
add r3, r2, r3
ldrb r2, [r3] @ zero_extendqisi2
sub r1, fp, #84
ldr r3, [fp, #-20]
add r3, r1, r3
ldrb r3, [r3] @ zero_extendqisi2
cmp r2, r3
bne .L6
ldr r2, [fp, #-12]
ldr r3, [fp, #-20]
add r3, r2, r3
str r3, [fp, #-12]
.L6:
ldr r3, [fp, #-20]
add r3, r3, #1
str r3, [fp, #-20]
b .L7
.L5:
ldr r3, [fp, #-16]
add r3, r3, #1
str r3, [fp, #-16]
b .L8
.L4:
ldr r1, [fp, #-12]
ldr r0, .L10+4
bl std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
sub r3, fp, #88
mov r1, r3
ldr r0, .L10+8
bl std::basic_istream<char, std::char_traits<char> >::operator>>(int&)
ldr r0, [fp, #-12]
bl magicNum(int)
sub r3, fp, #92
mov r1, r3
ldr r0, .L10+8
bl std::basic_istream<char, std::char_traits<char> >::operator>>(int&)
mov r3, #0
mov r0, r3
sub sp, fp, #4
ldmfd sp!, {fp, lr}
bx lr
.L10:
.word .LC0
.word std::cout
.word std::cin
.word .LC1
.LC2:
.ascii "Your magic number is: "
magicNum(int):
stmfd sp!, {fp, lr}
add fp, sp, #4
sub sp, sp, #8
str r0, [fp, #-8]
ldr r3, [fp, #-8]
cmp r3, #9
ble .L13
ldr r0, [fp, #-8]
bl digitSum(int)
b .L14
.L13:
ldr r1, .L15
ldr r0, .L15+4
bl std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov r3, r0
ldr r1, [fp, #-8]
mov r0, r3
bl std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
.L14:
mov r0, r0 @ nop
mov r0, r3
sub sp, fp, #4
ldmfd sp!, {fp, lr}
bx lr
.L15:
.word .LC2
.word std::cout
digitSum(int):
stmfd sp!, {fp, lr}
add fp, sp, #4
sub sp, sp, #8
str r0, [fp, #-8]
ldr r0, [fp, #-8]
bl magicNum(int)
mov r0, r0 @ nop
mov r0, r3
sub sp, fp, #4
ldmfd sp!, {fp, lr}
bx lr
__static_initialization_and_destruction_0(int, int):
stmfd sp!, {fp, lr}
add fp, sp, #4
sub sp, sp, #8
str r0, [fp, #-8]
str r1, [fp, #-12]
ldr r3, [fp, #-8]
cmp r3, #1
bne .L20
ldr r3, [fp, #-12]
ldr r2, .L21
cmp r3, r2
bne .L20
ldr r0, .L21+4
bl std::ios_base::Init::Init()
ldr r2, .L21+8
ldr r1, .L21+12
ldr r0, .L21+4
bl __aeabi_atexit
.L20:
mov r0, r0 @ nop
sub sp, fp, #4
ldmfd sp!, {fp, lr}
bx lr
.L21:
.word 65535
.word std::__ioinit
.word __dso_handle
.word std::ios_base::Init::~Init()
_GLOBAL__sub_I_main:
stmfd sp!, {fp, lr}
add fp, sp, #4
ldr r1, .L24
mov r0, #1
bl __static_initialization_and_destruction_0(int, int)
sub sp, fp, #4
ldmfd sp!, {fp, lr}
bx lr
.L24:
.word 65535
Output :
Enter a name: xyz
75
Enter a name: abc
6
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.