home *** CD-ROM | disk | FTP | other *** search
- title put multiple bytes
- include asm.inc
-
- public put_multiple_bytes
-
- .code
- extn putchar,putchar_space,put_hex_byte,putchar_newline
-
- ;; put multiple bytes
- ;
- ; entry CX byte count
- ; DS:SI byte pointer
- ; uses AX,CX,SI
- ;
- put_multiple_bytes proc
- jcxz pmb9 ; if no bytes to display
- pmb1: cmp cx,16
- jbe pmb2 ; if <16 bytes, display and return
-
- push cx ; else display next 16 bytes
- mov cx,16
- call pmb2
- pop cx
- sub cx,16
- jmp pmb1 ; and continue
-
- pmb2: push dx ; display bytes in hex
- mov dx,cx
- pmb3: lodsb
- call put_hex_byte
- mov al,' '
- call putchar
- loop pmb3
- sub si,dx
-
- mov cx,16 ; space over so ASCII lines up
- sub cx,dx
- jcxz pmb5
- pmb4: call putchar_space
- call putchar_space
- call putchar_space
- loop pmb4
-
- pmb5: mov cx,dx ; display bytes in ASCII
- pmb6: lodsb
- cmp al,' ' ; use period for control characters
- jb pmb7
- cmp al,'~'
- jbe pmb8
- pmb7: mov al,'.'
- pmb8: call putchar
- loop pmb6
- call putchar_newline
- pop dx
- pmb9: ret
- put_multiple_bytes endp
-
- end
-