您的位置:首页 > 其它

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

2014-05-19 12:45 525 查看
1. 题目:找出前100以内素数。

2. 要求:将前100以内素数找出并显示值,要求每行显示5个素数。

先列出求100以内素数的C++代码

然后根据C++代码写汇编代码,相对来说比较容易。

//The program is to find the primes from 1 to 100 with C++
//By Karllen
//time: 05/19/2014

#include <iostream>
int main(void)
{

int number = 2;
int flag   = 1;
while (number<=100)
{
int i = 2;
while (i<=number)
{
if (number%i==0)
{
break;
}
else
{
++i;
}
}
if (i==number)
{

std::cout<<number<< " ";
if (flag%5==0)
{
std::cout<<std::endl;
}
++flag;
}
++number;
}
system("pause");
return 0;
}


汇编代码如下:

; Example assembly language program -- adds two numbers
; Author:  Karllen
; Date:    revised 05/2014

.386
.MODEL FLAT

ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD

INCLUDE io.h            ; header file for input/output

cr      EQU     0dh     ; carriage return character
Lf      EQU     0ah     ; line feed

.STACK  4096            ; reserve 4096-byte stack

.DATA
; reserve storage for data
mm      DWORD  ?
number  DWORD  ?
flai    DWORD  ?
flaj    DWORD  ?
promot  BYTE  "The programer is to find all prime from 1 to 100 ",cr,Lf,0
answer  BYTE  "All prime is "
BYTE  cr,Lf,0
crlf    BYTE  cr,Lf,0
value   BYTE   11 DUP(?)

.CODE                           ; start of main program code
_start:
output promot
mov    mm,5
mov    number,2
mov    ecx,2
mov    flaj,0        ;计数,统计素数个数
doWhile:
mov flai,2
mov ecx,number
cmp ecx,100
jg  endWhile
doFindWhile:
cmp  flai,ecx
je   FindPrime
mov eax,ecx
cdq
idiv flai
cmp edx,0
je  endFindWhile

inc flai
jmp doFindWhile

FindPrime:
mov eax,flaj
cdq
idiv mm
cmp edx,0
jne  PrintNoCrlf
output crlf
printNoCrlf:
dtoa value,ecx
output value
inc flaj

endFindWhile:
inc number
jmp doWhile
endWhile:

INVOKE  ExitProcess, 0  ; exit with return code 0

PUBLIC _start                   ; make entry point public

END                             ; end of source code


测试结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: