0
好的,我是PC彙編程序的新手。我「米試圖寫一個程序,但它不會停止循環。我猜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
無論是否爲真,作爲彙編程序員,你必須注意獲取感興趣的值到寄存器中,子程序調用不會破壞它們(寄存器是珍貴的,子程序也需要使用其中的一些)。一種方法是使用註冊表管理(例如STDCALL),它提示你必須做什麼(例如,如果你遵循STDCALL慣例使用子程序,並且ECX對你很重要,你需要將它保存在子程序中呼叫)。 –
...通過子程序調用保存寄存器的常用方法是將其推入堆棧(這取決於堆棧中不包含子程序感興趣的任何內容;如果存在,則需要另一個技巧)。通常的方案是PUSH REG \ CALL SUBR \ POP REG,在OP代碼REG == ECX中。 –