汇编语言寻找任意数值内的完全平方数a^2+b^2=c^2(注释我会补上)

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值