Delay
- 📅 2026-07-14T05:27:32.103Z
- 👁️ 166 katselukertaa
- 🔓 Julkinen
; ----------------------------------------------------------
; Internal procedure
; Input : BX = milliseconds
; Clobbers: AX, BX, CX, DX, SI, DI
; ----------------------------------------------------------
_Delay:
; Convert ms -> ticks, rounding up:
; ticks = (ms + 54) / 55
mov ax, bx
add ax, 54
xor dx, dx
mov cx, 55
div cx ; AX = ticks to wait
mov si, ax ; SI = remaining ticks
; If 0, return immediately (Delay 0)
or si, si
jz .done
; Read starting BIOS tick count (CX:DX)
mov ah, 00h
int 1Ah
mov di, dx ; track low word only (sufficient for short delays)
.wait_next_tick:
mov ah, 00h
int 1Ah
cmp dx, di
je .wait_next_tick ; same tick, keep waiting
mov di, dx ; tick advanced
dec si
jnz .wait_next_tick
.done:
ret