16 ビット MASM アセンブリ x86 で、500 ミリ秒ごとに画面に文字を出力するスリープ/遅延手順を作成しようとしています。私が行った調査から、これを達成するには3つの方法があるようです.CPUクロックティックを使用する方法を使用したいと思います.
Mac OS X Snow Leopard で VMWare Fusion を介して Windows XP を実行していることに注意してください。それが何かに影響するかどうかはわかりません。
誰かが私を正しい方向に向けるか、微調整できる実用的なコードを提供してもらえますか? ありがとうございました!
私が見つけたコードは、毎秒画面に「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