Я пытаюсь создать процедуру сна/задержки в 16-битной MASM-сборке x86, которая будет, скажем, печатать символ на экране каждые 500 мс. Из исследования, которое я сделал, кажется, что для этого есть три метода - я хотел бы использовать тот, который использует тики ЦП.
Обратите внимание: я запускаю Windows XP через VMWare Fusion на Mac OS X Snow Leopard - я не уверен, что это повлияло на что-либо.
Может ли кто-нибудь указать мне в правильном направлении или предоставить рабочий код, который я могу настроить? Спасибо!
Код, который я нашел, должен печатать "A" на экране каждую секунду, но не работает (я хотел бы использовать миллисекунды в любом случае).
TOP:
MOV AH,2C
INT 21
MOV BH,DH ; DH has current second
GETSEC: ; Loops until the current second is not equal to the last, in BH
MOV AH,2C
INT 21
CMP BH,DH ; Here is the comparison to exit the loop and print 'A'
JNE PRINTA
JMP GETSEC
PRINTA:
MOV AH,02
MOV DL,41
INT 21
JMP TOP
РЕДАКТИРОВАТЬ: Следуя рекомендациям GJ, выполните рабочую процедуру. Просто назовите его
DELAY PROC
TIMER:
MOV AH, 00H
INT 1AH
CMP DX,WAIT_TIME
JB TIMER
ADD DX,3 ;1-18, where smaller is faster and 18 is close to 1 second
MOV WAIT_TIME,DX
RET
DELAY ENDP