dps fix debug_print dpd fix debug_print_dec dpds fix debug_print_dec_sign dnl fix debug_newline dpsP fix debug_printP ;if ~(newline eq) newline fix debug_newline ;end if macro debug_print str { local ..string, ..label jmp ..label ..string db str,0 ..label: pushf pushad mov edx,..string call debug_outstr popad popf } macro debug_print_dec arg { pushf pushad if ~arg eq eax mov eax,arg end if call debug_outdec popad popf } macro debug_print_dec_sign arg { local .sign,.rtrn pushf pushad if ~arg eq eax mov eax,arg end if test eax,80000000h jnz .sign call debug_outdec popad popf jmp .rtrn .sign: not eax inc eax push eax mov cl,'-' mov eax,63 mov ebx,1 int 0x40 pop eax call debug_outdec popad popf .rtrn: } ;--------------------------------- 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 debug_newline { pushf pushad mov edx, _debug_crlf call debug_outstr popad popf } macro debug_printP Pstr { pushf pushad mov edx,Pstr call debug_outstr popad popf } macro print message { dps message dnl } 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' ;-------------------------------------------------------------------------------