Сейчас на форуме: tyns777, zds, JustLife (+3 невидимых)

 eXeL@B —› Программирование —› Подскажите че можно исправить??
Посл.ответ Сообщение

Ранг: 1.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 13 января 2010 00:32
· Личное сообщение · #1

Значит проблема такая:
Есть код на С++, вот он:
#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

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

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



Ранг: 61.4 (постоянный), 1thx
Активность: 0.020
Статус: Участник

Создано: 13 января 2010 00:41
· Личное сообщение · #2

Многие компиляторы C/C++ умеют генерить асм-листинги.




Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 13 января 2010 01:29
· Личное сообщение · #3

есть перевод с генерацией асм листинга в настройках си ... копаться врятли кто то будет. Ниже разные примеры , когда интересовался тематикой собирал ...

ee59_12.01.2010_CRACKLAB.rU.tgz - ERATO.rar

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 13 января 2010 18:15
· Личное сообщение · #4

За вас тут лабу никто делать не будет. Тем более не по теме форума ни разу.


 eXeL@B —› Программирование —› Подскажите че можно исправить??
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати