86 lines
1.1 KiB
NASM
86 lines
1.1 KiB
NASM
; print a word
|
|
; in: ax
|
|
print16:
|
|
xchg ah,al
|
|
call print8
|
|
xchg ah,al
|
|
|
|
; print a byte
|
|
; in: al
|
|
print8:
|
|
push ax ; avoid destroying ah
|
|
push bx
|
|
xor bx, bx
|
|
aam 16 ; high nibble moved into ah, low nibble into al
|
|
add ax, 0x3030
|
|
push ax
|
|
xchg al, ah
|
|
call .nib
|
|
pop ax
|
|
call .nib
|
|
pop bx
|
|
pop ax
|
|
ret
|
|
.nib:
|
|
cmp al, 0x3a
|
|
jl .out
|
|
add al, 0x07
|
|
.out:
|
|
mov dl, al
|
|
call console_output
|
|
ret
|
|
|
|
dump:
|
|
push ax
|
|
push cx
|
|
push dx
|
|
push bx
|
|
mov dl, 0x0A
|
|
call console_output
|
|
mov dl, 0x0D
|
|
call console_output
|
|
mov cx, 4
|
|
.loop_line:
|
|
push cx
|
|
push bx
|
|
mov ax, bx
|
|
call print16
|
|
mov dl, ':'
|
|
call console_output
|
|
mov dl, ' '
|
|
call console_output
|
|
mov cx, 0x8
|
|
.loop_bin:
|
|
mov ax, [bx]
|
|
xchg al, ah
|
|
inc bx
|
|
inc bx
|
|
call print16
|
|
mov dl, ' '
|
|
call console_output
|
|
loop .loop_bin
|
|
pop bx
|
|
mov cx, 0x10
|
|
.loop_ascii:
|
|
mov dl, '.'
|
|
cmp byte [bx], 0x20
|
|
jc .print
|
|
cmp byte [bx], 0x80
|
|
jnc .print
|
|
mov dl, [bx]
|
|
.print:
|
|
inc bx
|
|
call console_output
|
|
loop .loop_ascii
|
|
pop cx
|
|
mov dl, 0x0A
|
|
call console_output
|
|
mov dl, 0x0D
|
|
call console_output
|
|
loop .loop_line
|
|
pop bx
|
|
pop dx
|
|
pop cx
|
|
pop ax
|
|
ret
|