# | Сообщение добавлено 28.05.2010 03:30:16
Отредактировано 28.05.2010 03:33:35 by Actor
Код выводит последовательно числа от 1 до 10
.386
.model flat, stdcall
include windows.inc
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib
BSIZE equ 2
.data
msg db 0dh, 0ah
fmt db "%d", 0
cWritten dd ?
stdout dd ?
.code
start:
call AllocConsole
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov stdout, eax
mov ecx, 10
mov edx, 1
next:
push ecx
push edx
invoke wsprintf, ADDR msg, ADDR fmt, edx
invoke WriteConsoleA, stdout, ADDR msg, BSIZE, ADDR cWritten, NULL
pop edx
inc edx
pop ecx
loop next
invoke ExitProcess, 0
end start
Документирую строки с push и pop, имею след код
.386
.model flat, stdcall
include windows.inc
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib
BSIZE equ 2
.data
msg db 0dh, 0ah
fmt db "%d", 0
cWritten dd ?
stdout dd ?
.code
start:
call AllocConsole
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov stdout, eax
mov ecx, 10
mov edx, 1
next:
;push ecx
;push edx
invoke wsprintf, ADDR msg, ADDR fmt, edx
invoke WriteConsoleA, stdout, ADDR msg, BSIZE, ADDR cWritten, NULL
;pop edx
inc edx
;pop ecx
loop next
invoke ExitProcess, 0
end start
После первого выполнения функции wsprintf значение регистра ecx меняется, и программа работает неправильно. Собсно вопрос, почему изменяется значение регистра ecx?