汇编语言-求毕达哥拉斯三角形的边

本文介绍了一个汇编语言程序,用于求解给定最长边C时的所有毕达哥拉斯三角形。通过双重循环遍历可能的A、B边长,当满足A^2 + B^2 = C^2时输出三角形边长。

1. 题目:给定一条最长边,求所有可能的毕达哥拉斯三角形。

2. 实验要求:一个毕达哥拉斯三角形的三条边是由三个正整数A、B和C组成,从而A2+B2=C2。例如,数字3、4、5,由于9+16=25,而形成一个毕达哥拉斯三角形。写一段完整的汇编程序,实现输入一个值给C,然后显示值为C时,所有可能的毕达哥拉斯三角形。例如,如果输入5作为C的值,那么输出可以是:

A              B              C

3                    4                   5

4                    3                   5

3. 提示:由于C边的值已经给定,建立一个双重循环,外循环将A初值设1,每次循环加1,直到等于C-1;内循环将B值设为1,每次循环加1,直到等于C-1。在内循环中如果A2+B2=C2成立,则当前的A、B、C是一个毕达哥拉斯三角形的边,并显示,如果不成立,继续循环。

 1 ; Example assembly language program 
 2 ; Author:  karllen
 3 ; Date:    revised 5/2014
 4 
 5 .386
 6 .MODEL FLAT
 7 
 8 ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD
 9 
10 INCLUDE io.h            ; header file for input/output
11 
12 cr      EQU     0dh     ; carriage return character
13 Lf      EQU     0ah     ; line feed
14 
15 .STACK  4096            ; reserve 4096-byte stack
16 
17 .DATA
18      promot BYTE "Please Enter a number as the max slide ",0
19      value  BYTE 40 DUP(?)
20      nc     DWORD ?
21      na     DWORD ?
22      nb     DWORD ?
23      n      DWORD ?
24      
25      answer  BYTE "         A         B         C ",0
26      crLf    BYTE cr,Lf,0
27      
28 
29 .CODE                           ; start of main program code
30 _start:
31         mov    ebx,0
32         mov    ecx,0
33         
34         output promot
35         input  value,40
36         atod   value
37         
38         mov nc,eax
39         mov n, eax
40         
41         mul nc
42         mov nc,eax ;C*C
43         output answer
44         output crLf
45         doFirstWhile:
46              inc ebx
47              mov ecx,0
48              cmp ebx,n
49              jge endFirstWhile  ;大于等于n则转移
50              
51              mov eax,ebx
52              mul ebx
53              mov na,eax       ;A*A
54              doSecondWhile:
55                 inc ecx
56                 cmp ecx,n       
57                 jge endSecondWhile ;大于等于n则转移
58                 ;执行比较
59         
60                 mov eax,ecx
61                 mul ecx         ;B*B
62                 mov nb,eax
63                 mov edx,nb
64                
65                 add edx,na        ;A*A+B*B
66                 
67                 cmp edx,nc
68                 jne  stanIf        ;不等于则转移
69                
70                 ;output answer
71                 dtoa value,ebx
72                 output value
73                 
74                 dtoa value,ecx
75                 output value
76                 
77                 dtoa value,n 
78                 output value
79                 output crLf
80                 
81                 jmp doSecondWhile
82              stanIf:
83                 jmp doSecondWhile
84              endSecondWhile:
85                 jmp doFirstWhile
86                 
87         endFirstWhile:
88        
89        INVOKE  ExitProcess, 0  ; exit with return code 0
90 
91 PUBLIC _start                   ; make entry point public
92 
93 END                             ; end of source code

 

转载于:https://www.cnblogs.com/Forever-Kenlen-Ja/p/3734439.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值