Question: Comment this Assembly code please. As many lines as possible: factorial(int): stp x29, x30, [sp, -48]! add x29, sp, 0 str x19, [sp, 16] str
Comment this Assembly code please. As many lines as possible:
factorial(int):
stp x29, x30, [sp, -48]!
add x29, sp, 0
str x19, [sp, 16]
str w0, [x29, 44]
ldr w0, [x29, 44]
cmp w0, wzr
beq .L2
ldr w0, [x29, 44]
cmp w0, 1
bne .L3
.L2:
mov x0, 1
b .L4
.L3:
ldrsw x19, [x29, 44]
ldr w0, [x29, 44]
sub w0, w0, #1
bl factorial(int)
mul x0, x19, x0
.L4:
ldr x19, [sp, 16]
ldp x29, x30, [sp], 48
ret
power(float, int):
stp x29, x30, [sp, -32]!
add x29, sp, 0
str s0, [x29, 28]
str w0, [x29, 24]
ldr w0, [x29, 24]
cmp w0, wzr
bne .L6
fmov s0, 1.0e+0
b .L7
.L6:
ldr w0, [x29, 24]
cmp w0, 1
bne .L8
ldr s0, [x29, 28]
b .L7
.L8:
ldr w0, [x29, 24]
sub w0, w0, #1
ldr s0, [x29, 28]
bl power(float, int)
fmov s1, s0
ldr s0, [x29, 28]
fmul s0, s1, s0
.L7:
ldp x29, x30, [sp], 32
ret
.LC0:
.string "Enter a value of X between -5 and 5: "
.LC1:
.string "%lf"
.LC2:
.string "Please enter a new value of X between -5 and 5: "
.LC3:
.string "Enter the value of A less than 16: "
.LC4:
.string "%lli"
.LC5:
.string "Please enter a new value of A less than 16: "
.LC6:
.string "The exponential value is: %lf "
main:
stp x29, x30, [sp, -64]!
add x29, sp, 0
str d8, [sp, 16]
adrp x0, .LC0
add x0, x0, :lo12:.LC0
bl printf
add x1, x29, 40
adrp x0, .LC1
add x0, x0, :lo12:.LC1
bl scanf
.L12:
ldr d1, [x29, 40]
fmov d0, 5.0e+0
fcmpe d1, d0
cset w0, gt
uxtb w0, w0
eor w0, w0, 1
uxtb w0, w0
cmp w0, wzr
beq .L10
ldr d1, [x29, 40]
fmov d0, -5.0e+0
fcmpe d1, d0
cset w0, mi
uxtb w0, w0
eor w0, w0, 1
uxtb w0, w0
cmp w0, wzr
bne .L11
.L10:
adrp x0, .LC2
add x0, x0, :lo12:.LC2
bl printf
add x1, x29, 40
adrp x0, .LC1
add x0, x0, :lo12:.LC1
bl scanf
b .L12
.L11:
adrp x0, .LC3
add x0, x0, :lo12:.LC3
bl printf
add x1, x29, 32
adrp x0, .LC4
add x0, x0, :lo12:.LC4
bl scanf
.L14:
ldr x0, [x29, 32]
cmp x0, 16
ble .L13
adrp x0, .LC5
add x0, x0, :lo12:.LC5
bl printf
add x1, x29, 32
adrp x0, .LC4
add x0, x0, :lo12:.LC4
bl scanf
b .L14
.L13:
str wzr, [x29, 52]
.L16:
ldrsw x1, [x29, 52]
ldr x0, [x29, 32]
cmp x1, x0
bgt .L15
ldr d0, [x29, 40]
fcvt s0, d0
ldr w0, [x29, 52]
bl power(float, int)
fmov s8, s0
ldr w0, [x29, 52]
bl factorial(int)
scvtf s0, x0
fdiv s0, s8, s0
fcvt d0, s0
ldr d1, [x29, 56]
fadd d0, d1, d0
str d0, [x29, 56]
ldr w0, [x29, 52]
add w0, w0, 1
str w0, [x29, 52]
b .L16
.L15:
adrp x0, .LC6
add x0, x0, :lo12:.LC6
ldr d0, [x29, 56]
bl printf
mov w0, 0
ldr d8, [sp, 16]
ldp x29, x30, [sp], 64
ret
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
