Я пытаюсь создать процедуру сна / задержки в 16-битной MASM Assembly 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