1. 程式人生 > >匯編語言-判斷素數:找出前100以內的素數

匯編語言-判斷素數:找出前100以內的素數

vcd awb 計數 ise stax rsh amr 統計 tco

1. 題目:找出前100以內素數。

2. 要求:將前100以內素數找出並顯示值,要求每行顯示5個素數。

先列出求100以內素數的C++代碼

然後根據C++代碼寫匯編代碼,相對來說比較容易。

技術分享
 1 //The program is to find the primes from 1 to 100 with C++
 2 //By Karllen
 3 //time: 05/19/2014
 4 
 5 #include <iostream>
 6 int main(void)
 7 {
 8 
 9     int number = 2;
10     int flag   = 1;
11     while (number<=100)
12     {
13         int i = 2;
14         while (i<=number)
15         {
16             if (number%i==0)
17             {
18                 break;
19             }
20             else
21             {
22                 ++i;
23             }
24         }
25         if (i==number)
26         {
27             
28             std::cout<<number<< " ";
29             if (flag%5==0)
30             {
31                 std::cout<<std::endl;
32             }
33             ++flag;    
34         }
35         ++number;
36     }
37     system("pause");
38     return 0;
39 }
技術分享

匯編代碼如下:

技術分享
 1 ; Example assembly language program -- adds two numbers
 2 ; Author:  Karllen
 3 ; Date:    revised 05/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                ; reserve storage for data
19         mm      DWORD  ?
20         number  DWORD  ?
21         flai    DWORD  ?
22         flaj    DWORD  ?
23         promot  BYTE  "The programer is to find all prime from 1 to 100 ",cr,Lf,0
24         answer  BYTE  "All prime is "
25                 BYTE  cr,Lf,0 
26         crlf    BYTE  cr,Lf,0  
27         value   BYTE   11 DUP(?) 
28 
29 .CODE                           ; start of main program code
30 _start:
31         output promot
32         mov    mm,5
33         mov    number,2
34         mov    ecx,2
35         mov    flaj,0        ;計數,統計素數個數
36         doWhile:
37                mov flai,2
38                mov ecx,number
39                cmp ecx,100
40                jg  endWhile
41                doFindWhile:
42                    cmp  flai,ecx
43                    je   FindPrime
44                         mov eax,ecx
45                         cdq
46                         idiv flai
47                         cmp edx,0
48                         je  endFindWhile
49                            
50                         inc flai
51                         jmp doFindWhile  
52                         
53                  FindPrime: 
54                         mov eax,flaj
55                         cdq
56                         idiv mm
57                         cmp edx,0
58                         jne  PrintNoCrlf      
59                         output crlf
60                  printNoCrlf:
61                         dtoa value,ecx
62                         output value
63                         inc flaj
64                         
65            endFindWhile:   
66                inc number
67                jmp doWhile
68         endWhile:
69         
70         INVOKE  ExitProcess, 0  ; exit with return code 0
71 
72 PUBLIC _start                   ; make entry point public
73 
74 END                             ; end of source code
技術分享

測試結果:

技術分享

匯編語言-判斷素數:找出前100以內的素數