147 lines
2.1 KiB
PHP
147 lines
2.1 KiB
PHP
|
macro debug_print str
|
||
|
{
|
||
|
local ..string, ..label
|
||
|
|
||
|
jmp ..label
|
||
|
..string db str,0
|
||
|
..label:
|
||
|
|
||
|
pushf
|
||
|
pushad
|
||
|
mov edx,..string
|
||
|
call debug_outstr
|
||
|
popad
|
||
|
popf
|
||
|
}
|
||
|
|
||
|
dps fix debug_print
|
||
|
|
||
|
macro debug_print_dec arg
|
||
|
{
|
||
|
pushf
|
||
|
pushad
|
||
|
if ~arg eq eax
|
||
|
mov eax,arg
|
||
|
end if
|
||
|
call debug_outdec
|
||
|
popad
|
||
|
popf
|
||
|
}
|
||
|
|
||
|
dpd fix debug_print_dec
|
||
|
|
||
|
;---------------------------------
|
||
|
debug_outdec: ;(eax - num, edi-str)
|
||
|
push 10 ;2
|
||
|
pop ecx ;1
|
||
|
push -'0' ;2
|
||
|
.l0:
|
||
|
xor edx,edx ;2
|
||
|
div ecx ;2
|
||
|
push edx ;1
|
||
|
test eax,eax ;2
|
||
|
jnz .l0 ;2
|
||
|
.l1:
|
||
|
pop eax ;1
|
||
|
add al,'0' ;2
|
||
|
call debug_outchar ; stosb
|
||
|
jnz .l1 ;2
|
||
|
ret ;1
|
||
|
;---------------------------------
|
||
|
|
||
|
debug_outchar: ; al - char
|
||
|
pushf
|
||
|
pushad
|
||
|
mov cl,al
|
||
|
mov eax,63
|
||
|
mov ebx,1
|
||
|
int 0x40
|
||
|
popad
|
||
|
popf
|
||
|
ret
|
||
|
|
||
|
debug_outstr:
|
||
|
mov eax,63
|
||
|
mov ebx,1
|
||
|
@@:
|
||
|
mov cl,[edx]
|
||
|
test cl,cl
|
||
|
jz @f
|
||
|
int 40h
|
||
|
inc edx
|
||
|
jmp @b
|
||
|
@@:
|
||
|
ret
|
||
|
|
||
|
_debug_crlf db 13, 10, 0
|
||
|
|
||
|
macro newline_1
|
||
|
{
|
||
|
pushf
|
||
|
pushad
|
||
|
mov edx, _debug_crlf
|
||
|
call debug_outstr
|
||
|
popad
|
||
|
popf
|
||
|
}
|
||
|
|
||
|
macro newline
|
||
|
{
|
||
|
pushf
|
||
|
pushad
|
||
|
mov edx, _debug_crlf
|
||
|
call debug_outstr
|
||
|
popad
|
||
|
popf
|
||
|
}
|
||
|
|
||
|
macro print message
|
||
|
{
|
||
|
dps message
|
||
|
newline
|
||
|
}
|
||
|
|
||
|
macro pregs
|
||
|
{
|
||
|
dps "EAX: "
|
||
|
dpd eax
|
||
|
dps " EBX: "
|
||
|
dpd ebx
|
||
|
newline
|
||
|
dps "ECX: "
|
||
|
dpd ecx
|
||
|
dps " EDX: "
|
||
|
dpd edx
|
||
|
newline
|
||
|
}
|
||
|
|
||
|
macro debug_print_hex arg
|
||
|
{
|
||
|
pushf
|
||
|
pushad
|
||
|
if ~arg eq eax
|
||
|
mov eax, arg
|
||
|
end if
|
||
|
call debug_outhex
|
||
|
popad
|
||
|
popf
|
||
|
}
|
||
|
dph fix debug_print_hex
|
||
|
|
||
|
debug_outhex:
|
||
|
; eax - number
|
||
|
mov edx, 8
|
||
|
.new_char:
|
||
|
rol eax, 4
|
||
|
movzx ecx, al
|
||
|
and cl, 0x0f
|
||
|
mov cl, [__hexdigits + ecx]
|
||
|
pushad
|
||
|
mcall 63, 1
|
||
|
popad
|
||
|
dec edx
|
||
|
jnz .new_char
|
||
|
ret
|
||
|
|
||
|
__hexdigits:
|
||
|
db '0123456789ABCDEF'
|