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

Форум программистов: 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 сообщение ] 


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

Зарегистрированные пользователи: Google [Bot]


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

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