MODEL TINY
org 100h
.386
; 386REG.ASM: Hooks timer INT 8 and provides a continuous display of
; EAX, EBX, ECX, EDX, ESI, EDI on the top line of the screen.
; Written by Rowan Crowe (3:635/727.1@fidonet)
; Released to the Public Domain
DATASEG
__nybtab: db '0123456789abcdef'
__regmsg: db 'EAX=EBX=ECX=EDX=ESI=EDI=EBP='
_end_of_code:
CODESEG
startupcode
mov es, cs:[002ch]
mov ah, 49h
int 21h ; free environment
mov ax, 3508h
int 21h
mov cs:word ptr __oldint8, bx
mov cs:word ptr __oldint8+2, es
mov ax, 2508h
mov bx, cs
mov ds, bx
mov dx, offset _int8
int 21h
mov ax, 3100h
mov dx, offset _end_of_code
shr dx, 4
inc dx
int 21h
_int8 proc near
call _showreg
db 0eah ;
__oldint8:
dw ? ; jmp far
dw ? ;
endp
_showreg proc near
push gs fs es ds ebp edi esi edx ecx ebx eax
mov bp, sp
mov ax, 0b800h
mov es, ax
mov ax, cs
mov ds, ax
xor si, si ; pointer to regs
xor di, di ; screen write pointer
mov ah, 16h
mov al, ' '
stosw
@L1:
mov bx, si
add bx, offset __regmsg
mov cx, 4
@L2:
mov al, [bx]
inc bx
stosw
loop @L2
mov ebx, [bp+si]
call _hex32
mov al, ' '
stosw
add si, 4
cmp si, 24
jb @L1
pop eax ebx ecx edx esi edi ebp ds es fs gs
ret
endp
_hex32 proc near
; EBX = number to display
push ebx
shr ebx, 16
call _hex16
pop ebx
call _hex16
ret
endp
_hex16 proc near
; BX = number to display
xchg bh, bl
call _hex8
xchg bh, bl
call _hex8
ret
endp
_hex8 proc near
; BL = number to display
push bx
push bx
shr bl, 1
shr bl, 1
shr bl, 1
shr bl, 1
call _nybble
pop bx
call _nybble
pop bx
ret
endp
_nybble proc near
and bx, 0fh
mov al, byte ptr __nybtab+bx
stosw
ret
endp
end