In: Computer Science
using Emulator Write an Assembly program that will produce all
divisors for a 1-digit decimal number. For example, if the number
is 6, then the outputs will be 1,2,3,6 which are the divisors of
6.
show me the output
Please give positive ratings for my effort. Thanks.
PROGRAM
.LC0:
.string "%d "
.LC1:
.string "%d %d "
main:
push rbp
mov rbp, rsp
sub rsp, 32
mov DWORD PTR [rbp-8], 6
mov DWORD PTR [rbp-4], 1
.L5:
pxor xmm1, xmm1
cvtsi2sd xmm1, DWORD PTR [rbp-4]
movsd QWORD PTR [rbp-24], xmm1
pxor xmm2, xmm2
cvtsi2sd xmm2, DWORD PTR [rbp-8]
movq rax, xmm2
movq xmm0, rax
call sqrt
movq rax, xmm0
movq xmm3, rax
comisd xmm3, QWORD PTR [rbp-24]
setnb al
test al, al
je .L2
mov eax, DWORD PTR [rbp-8]
cdq
idiv DWORD PTR [rbp-4]
mov eax, edx
test eax, eax
jne .L3
mov eax, DWORD PTR [rbp-8]
cdq
idiv DWORD PTR [rbp-4]
cmp DWORD PTR [rbp-4], eax
jne .L4
mov eax, DWORD PTR [rbp-4]
mov esi, eax
mov edi, OFFSET FLAT:.LC0
mov eax, 0
call printf
jmp .L3
.L4:
mov eax, DWORD PTR [rbp-8]
cdq
idiv DWORD PTR [rbp-4]
mov edx, eax
mov eax, DWORD PTR [rbp-4]
mov esi, eax
mov edi, OFFSET FLAT:.LC1
mov eax, 0
call printf
.L3:
add DWORD PTR [rbp-4], 1
jmp .L5
.L2:
mov eax, 0
leave
ret
__static_initialization_and_destruction_0(int, int):
push rbp
mov rbp, rsp
sub rsp, 16
mov DWORD PTR [rbp-4], edi
mov DWORD PTR [rbp-8], esi
cmp DWORD PTR [rbp-4], 1
jne .L9
cmp DWORD PTR [rbp-8], 65535
jne .L9
mov edi, OFFSET FLAT:_ZStL8__ioinit
call std::ios_base::Init::Init() [complete object constructor]
mov edx, OFFSET FLAT:__dso_handle
mov esi, OFFSET FLAT:_ZStL8__ioinit
mov edi, OFFSET FLAT:_ZNSt8ios_base4InitD1Ev
call __cxa_atexit
.L9:
nop
leave
ret
_GLOBAL__sub_I_main:
push rbp
mov rbp, rsp
mov esi, 65535
mov edi, 1
call __static_initialization_and_destruction_0(int, int)
pop rbp
ret