ExitProcess proto
main proto
e proto
maxi proto
max = 1000;你想要的最大数
lalal =50;可计算2500以下完全平方数,极限值是该数的平方
.data
ll qword lalal dup (0);范围内所有的平方数
gg qword lalal dup (0);得数的平方
hhh qword lalal dup (0);得数
hh byte 1
.code
main proc
mov r11,offset gg
mov rdi,offset ll
call maxi
call e
mov rsi,rdi
mov r8,rsi
add r8,r9
mov r10,r8
L1:
mov rax,[rdi]
L4:
mov rbx,[rsi]
add rax,rbx
L3:
cmp qword ptr [r8],rax
jne L2
mov rcx,[rdi]
mov [r11],rcx
mov [r11+8],rbx
mov [r11+16],rax
add r11,24
jmp L6
L2:
sub r8,8
cmp r8,rsi
jne L3
L6:
add rsi,8
mov r8,r10
cmp rsi,r10
jne L1
add rdi,8
mov rsi,rdi
cmp rdi,r10
jne L1
mov rsi,offset ll
mov rdi,offset gg
mov r8,offset hhh
call find
mov ecx,0
call ExitProcess
main endp
maxi proc uses rax rbx rsi ;用rdi向它传递存放完全平方数的内存偏移量
mov rbx,1
mov rcx,0
mov rsi,rdi
L1:
mov rax,rbx
mul rbx
inc rbx
inc rcx
mov [rsi],rax
add rsi,8
cmp rax,max
jb L1
ret
maxi endp
e proc uses rsi rax
mov rsi,rdi
mov r9,0
mov r15,0
L2:
mov rax,[rsi]
cmp rax,0
je L1
add r9,8
inc r15
add rsi,8
jmp L2
L1:
ret
e endp
find proc uses r9 r15 rax rbx rsi rdi rcx r8
mov rdx,0
call e
mov rcx,r15
mov rbp,rsi
L1:
mov rdx,0
mov rax,[rdi]
L2:
mov rbx,[rsi]
inc rdx
add rsi,8
cmp rax,rbx
jne L2
mov rsi,rbp
add rdi,8
mov [r8],rdx
add r8,8
loop L1
ret
find endp
end
汇编语言寻找任意数值内的完全平方数a^2+b^2=c^2(注释我会补上)
最新推荐文章于 2023-05-14 08:38:34 发布