Бесконечная петля с сборкой - PullRequest
0 голосов
/ 07 августа 2011

ОК, я новичок в ПК Ассемблер. Я пытаюсь написать программу, но она не остановит зацикливание. Я предполагаю, что регистр ECX изменяется? Как я могу это исправить? Спасибо.

DATA SECTION
;
KEEP DD 0                   ;temporary place to keep things
;
CODE SECTION
;
START:
MOV ECX,12
TOPOFLOOP:
PUSH -11                        ;STD_OUTPUT_HANDLE
CALL GetStdHandle           ;get, in eax, handle to active screen buffer
PUSH 0,ADDR KEEP            ;KEEP receives output from API
PUSH 5,'bruce'                  ;5=length of string
PUSH EAX                    ;handle to active screen buffer
CALL WriteFile
XOR EAX,EAX                 ;return eax=0 as preferred by Windows
LOOP TOPOFLOOP
ENDLABEL:
RET

1 Ответ

2 голосов
/ 07 августа 2011

В большинстве соглашений о вызовах x86, включая соглашение stdcall, используемое функциями Windows API, ECX является регистром сохранения вызывающего абонента - вызываемая функция не обязана гарантировать, что значение регистра будет тем же самым, когда она возвращаеткак когда это называлось.Вы должны сохранить его в безопасном месте в своем собственном коде.

...