→ Для вступления в общество новичков и профессионалов программирования, пожалуйста нажмите здесь ...

Форум программистов: C++, Basic, Delphi, Pascal, JavaScript
Логин: Пароль:
Запомнить?  
@Mail.ru



Начать новую тему Ответить на тему  [ 1 сообщение ] 
Помогите разобратся ну или хоть подскажите 
Автор Сообщение
Начинающий

Регистрация: 03.01.2010
Сообщения: 3
Языки:
Специальность:

Репутация: 0 [ ? ]
Сообщение Помогите разобратся ну или хоть подскажите
Значит проблема такая:
Есть код на С++, вот он:
#include <stdio.h>
#define N 20000
//алгоритм "решето Эратосфена"
unsigned int a[N];
void main(){
//заполним все ячейки числами по порядку: 0,1,2,3...
for(int i=0; i<N; i++){
a[i] = i;
}
//поскольку 1 не простое число, обнулим ячейку с этим числом
a[1]=0;
for(int s=2; s<N; s++){
if(a[s]!=0){
for(int j=s*2; j<N; j+=s){
a[j]=0;
}
}
}
for(i=0; i<N; i++){
if(a[i]!=0){
printf("%d\n", a[i]);
}
}
}

Это код нахождения простых чисел методом решета Эратосфена.
Я (строго не судите, студент, ничего не знаю) написал код на масме, но наделал кучу косяков.
Собственно код вот:
.386
.model flat, stdcall
option casemap:none
include \9-II-SKS\myasm\include\windows.inc
include \9-II-SKS\myasm\include\kernel32.inc
include \9-II-SKS\myasm\include\user32.inc
includelib \9-II-SKS\myasm\lib\user32.lib
includelib \9-II-SKS\myasm\lib\kernel32.lib
BSIZE equ 100
BSZZ equ 15
.data
stdout DWORD ?
cWritten DWORD ?
nn DWORD ?
digit DWORD ?
mn DWORD ?
per DWORD ?
Massive DWORD BSIZE dup (?)
ifmt BYTE "%d",0
buf BYTE BSIZE dup (?)
crlf BYTE 0dh, 0ah
.code
start:
invoke GetStdHandle,STD_OUTPUT_HANDLE
mov stdout, eax
mov ecx, BSIZE
mov ebx,0
mov edi,0
nxt:
mov Massive[edi], ebx
inc ebx
add edi,4
loop nxt
mov Massive [1],0
mov edi,0
nxt1:
inc edi
mov edx, Massive[edi]
mov digit, edx
cmp edi, BSIZE
jnz nxt3
cmp digit,0
jnz nxt1
mov nn,edi
mov eax,2
mul edi
nxt2:
mov Massive[eax],0
add eax,nn
cmp eax,BSIZE
ja nxt1
jnz nxt2
nxt3:
mov edi, 0
mov eax,0
nxt4:
mov edx, Massive[edi]
mov per, edx
add edi,4
cmp per,0
jnz nxt4
mov eax, Massive[edi]
invoke wsprintf,ADDR buf,ADDR ifmt,eax
invoke WriteConsoleA,stdout,ADDR buf,BSZZ,ADDR cWritten,NULL
cmp edi,BSIZE
jnz nxt4
jnz exit
exit:
invoke ExitProcess,0
end start

Короче говоря мозги кипели, и наделал всякой чуши:(

Кто есть знающий подскажите на косяки, и помогите доделать плз. ПРОШУ строго не судите это моя почти первая прога на ассемблере:)


12.01.2010 23:28
Профиль Отправить email
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 


Кто сейчас на конференции

Зарегистрированные пользователи: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
© 2013 «Форум программистов Украины»