Большой Воронежский Форум
» Программирование>Кто шарит в Ассемблере-сюда.
Byte 12:06 27.05.2007
Народ кто обьяснит такую вещь?Вот прога:

**************************************************
.386
.model flat,stdcall
option casemap:none
include \myasm\include\windows.inc
include \myasm\include\user32.inc
includelib \myasm\lib\user32.lib
include \myasm\include\kernel32.inc
includelib \myasm\lib\kernel32.lib
SSIZE equ 1000 ;что-то в этой строке не так
BSIZE equ 200 ;и в этой
.data
PrChisla DWORD SSIZE dup(?)
ifmt BYTE "%d",0
buf BYTE BSIZE dup(?)
crlf Byte 13,10
.data?
stdout DWORD ?
cWritten DWORD ?
.code
start:
mov ebx,5
mov edi,0
mov ebp,0
nxtdig:
mov edx,0
mov eax,ebx
mov ecx,ebx
sub ecx,2
mov esi,2
nxtptr:
div esi
cmp edx,0
jz skip
mov edx,0
mov eax,ebx
inc esi
loop nxtptr
mov PrChisla[esi],ebx
inc ebp
cmp ebp,SSIZE
jz done
add edi,4
invoke GetStdHandle,STD_OUTPUT_HANDLE
mov stdout,eax
invoke wsprintf,addr buf,addr ifmt,ebx
invoke WriteConsoleA,stdout,addr buf,
BSIZE,addr cWritten,NULL
invoke WriteConsoleA,stdout,addr crlf,2,
addr cWritten,NULL
skip:
inc ebx
jmp nxtdig
done:
invoke ExitProcess,0
end start
************************************************** **
Теперь обьясняю, что она делает.Она ищет и выводит на экран простые числа.(Простые числа -это те, что делятся ТОЛЬКО на 1 и на саму себя, кажется так....) Я понимаю, что копаться в чужом коде-это как в чужой голове ковыряться=)) Но постарайтесь=))Теперь к делу:
Я меняю такие вот строки
**************************
SSIZE equ 1000 ;что-то в этой строке не так
BSIZE equ 200 ;и в этой
**************************
на ВОТ ЭТО
****************************
SSIZE equ 100
BSIZE equ 50
****************************
В первом случае выводятся числа, а вот во втором вот это
гм......ээээ....тут картинка должна быть...наверно.
Изображения
Нажмите на изображение для увеличения
Название: ваи.JPG
Просмотров: 31
Размер:	38.5 Кб
ID:	126718  
[Ответ]
DareDeviL! 13:45 27.05.2007

Сообщение от Byte:
Я понимаю, что копаться в чужом коде-это как в чужой голове ковыряться=)) Но постарайтесь=))

я вообще учил Асм [компилятор MASM4.0], мне по нему и экзамен 4го июня сдавать, но без комментариев не осилил, да и тут видимо компилятор другой. [Ответ]
Byte 14:00 27.05.2007
Хм....комментарии. Ща будут.

.386
.model flat,stdcall
option casemap:none
include \myasm\include\windows.inc
include \myasm\include\user32.inc
includelib \myasm\lib\user32.lib
include \myasm\include\kernel32.inc
includelib \myasm\lib\kernel32.lib
SSIZE equ 1000
BSIZE equ 200
.data
PrChisla DWORD SSIZE dup(?)
ifmt BYTE "%d",0
buf BYTE BSIZE dup(?)
crlf Byte 13,10
.data?
stdout DWORD ?
cWritten DWORD ?
.code
start:
mov ebx,5 ;первое проверяемое число =5
mov edi,0 ;нулевой элемент массива
mov ebp,0 ;счетчик простых чисел =0
nxtdig:
mov edx,0 ;готовим число edx:eax
mov eax,ebx ;к проверке
mov ecx,ebx ;число проверок меньше
sub ecx,2 ;проверяемого числа на 2
mov esi,2 ;первый делитель =2
nxtptr:
div esi ;делим число edx:eax на esi
cmp edx,0 ;остаток = 0?
jz skip ;да-идем к след. проверке
mov edx,0 ;нет
mov eax,ebx ;восстанавливаем edx:eax
inc esi ;и делим на след. число
loop nxtptr ; если есть на что делить-продолжим
mov PrChisla[esi],ebx ;если не на что , то число простое
inc ebp ;увеличиваем счетчик простых чисел
cmp ebp,SSIZE ;все простые числа найдены?
jz done ;да-уходим
add edi,4 ;нет-след. элемент массива
__________________________________________________ ___
invoke GetStdHandle,STD_OUTPUT_HANDLE ;Это все вывод
mov stdout,eax ;чисел
invoke wsprintf,addr buf,addr ifmt,ebx ; на
invoke WriteConsoleA,stdout,addr buf, ;экран
BSIZE,addr cWritten,NULL
invoke WriteConsoleA,stdout,addr crlf,2,
addr cWritten,NULL
__________________________________________________ _____
skip:
inc ebx ;подготавливаем след.число
jmp nxtdig
done:
invoke ExitProcess,0 ;выход=))
end start [Ответ]
Byte 14:02 27.05.2007
Пипец люди, похоже мне без ответа сидеть. Я посмотрел глазами человека, не писавшего эту прогу......жуть.=)) [Ответ]
Byte 14:02 27.05.2007
Прошу убить тему......... [Ответ]
Вверх