首页 > 代码库 > 汇编语言-判断素数:找出前100以内的素数

汇编语言-判断素数:找出前100以内的素数

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以内的素数