.code ; ############### ; prnbin - prints binary values ; ############### ; push word ptr ; push offset ; call prnbin ; ############### ; Prints the binary representation of LENGTH bytes, ; beginning at position TARGET prnbin proc near pusha pushf mov bp, sp mov bx, [bp+20] mov cx, [bp+22] mov ah, 2 prnbin_loop0_start: mov dh, 10000000b prnbin_loop1_start: mov dl, dh and dl, [bx] test dl, 11111111b jz prnbin_nobit mov dl, '1' jmp prnbin_yesbit prnbin_nobit: mov dl, '0' prnbin_yesbit: int 21h shr dh, 1 test dh, 11111111b jnz prnbin_loop1_start mov dl, ' ' int 21h inc bx loop prnbin_loop0_start call putcrlf popf popa ret 4 prnbin endp ; ############### ; prnbinr - prints binary representation in reverse order ; ############### ; push word ptr ; push offset ; call prnbinr ; ############### ; same as prnbin, except reversing byte order. useful for ; making little endian readable. prnbinr proc near pusha pushf mov bp, sp mov bx, [bp+20] mov cx, [bp+22] add bx, cx dec bx mov ah, 2 prnbinr_loop0_start: mov dh, 10000000b prnbinr_loop1_start: mov dl, dh and dl, [bx] test dl, 11111111b jz prnbinr_nobit mov dl, '1' jmp prnbinr_yesbit prnbinr_nobit: mov dl, '0' prnbinr_yesbit: int 21h shr dh, 1 test dh, 11111111b jnz prnbinr_loop1_start mov dl, ' ' int 21h dec bx loop prnbinr_loop0_start call putcrlf popf popa ret 4 prnbinr endp ; ################## ; putcrlf - prints a CRLF line break. ; ################## ; call putcrlf ; ################## .data crlf db 13,10,'$' .code putcrlf proc near pusha pushf mov dx, offset crlf mov ah, 9 int 21h popf popa ret putcrlf endp ; ##################### ; put2crlf - prints two CRLF line breaks. ; ##################### ; call put2crlf ; ##################### .code put2crlf proc near pusha pushf mov dx, offset crlf mov ah, 9 int 21h int 21h popf popa ret put2crlf endp ; ################ ; dumpflags - display state flags ; ################ ; call dumpflags ; ################ ; displays current state flags. 186 mode only. .data myflags dw ? flaglbls db ' ODIT SZ A P C',13,10,'$' .code dumpflags proc near mov dx, offset flaglbls mov ah, 9 int 21h pushf pop ax mov myflags, ax push word ptr 2 push offset myflags call prnbinr call put2crlf ret dumpflags endp ; ################### ; prndbg - print a period ; ################### ; call prndbg ; ################### ; prints a single period. prndbg proc near pusha pushf mov ah, 2 mov dl, '.' int 21h popf popa ret prndbg endp