windows - Endless loop med assember

Indlæg af Hanne Mølgaard Plasc

Problem



OK, jeg er ny til PC Assembler. Jeg prøver at skrive et program, men det vil ikke stoppe looping. Jeg gætter ECX-registret bliver ændret? Hvordan kan jeg løse dette? Tak.


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

Bedste reference


I de fleste x86-opkaldskonventioner, herunder stdcall -konventionen, der anvendes af Windows API-funktioner, er ECX et opkaldsregistreringsregister - den kaldte funktion er ikke nødvendig for at sikre, at værdien af ​​registret er den samme, når den vender tilbage som da det blev kaldt. Du skal gemme det et sikkert sted i din egen kode.