zoukankan      html  css  js  c++  java
  • 汇编语言-求毕达哥拉斯三角形的边

    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
  • 相关阅读:
    爬虫|如何在Pycharm中调试JS代码
    nexus 6p 输入8.1和获取root权限
    年近30的我,离开了北京,回家做个老百姓,等待那一刻的发生!
    Azure认知服务的实际应用-资讯采集推送
    C#类库推荐 拼多多.Net SDK,开源免费!
    [翻译]EntityFramework Core 2.2 发布
    4-如何学习和解决问题
    3-WIN10系统及开发工具支持
    2-选择学习的目标和方向
    1-编程的基本条件和起步
  • 原文地址:https://www.cnblogs.com/Forever-Kenlen-Ja/p/3734439.html
Copyright © 2011-2022 走看看