Народ кто обьяснит такую вещь?Вот прога:
**************************************************
.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
****************************
В первом случае выводятся числа, а вот во втором вот это
гм......ээээ....тут картинка должна быть...наверно.
Изображения
[Ответ]
Хм....комментарии. Ща будут.
.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
[Ответ]