68 lines
829 B
NASM
68 lines
829 B
NASM
|
SECTION .text
|
||
|
USE16
|
||
|
|
||
|
; provide function for printing in x86 real mode
|
||
|
|
||
|
; print a string and a newline
|
||
|
; CLOBBER
|
||
|
; ax
|
||
|
print_line:
|
||
|
mov al, 13
|
||
|
call print_char
|
||
|
mov al, 10
|
||
|
jmp print_char
|
||
|
|
||
|
; print a string
|
||
|
; IN
|
||
|
; si: points at zero-terminated String
|
||
|
; CLOBBER
|
||
|
; si, ax
|
||
|
print:
|
||
|
pushf
|
||
|
cld
|
||
|
.loop:
|
||
|
lodsb
|
||
|
test al, al
|
||
|
jz .done
|
||
|
call print_char
|
||
|
jmp .loop
|
||
|
.done:
|
||
|
popf
|
||
|
ret
|
||
|
|
||
|
; print a character
|
||
|
; IN
|
||
|
; al: character to print
|
||
|
print_char:
|
||
|
pusha
|
||
|
mov bx, 7
|
||
|
mov ah, 0x0e
|
||
|
int 0x10
|
||
|
popa
|
||
|
ret
|
||
|
|
||
|
; print a number in hex
|
||
|
; IN
|
||
|
; bx: the number
|
||
|
; CLOBBER
|
||
|
; al, cx
|
||
|
print_hex:
|
||
|
mov cx, 4
|
||
|
.lp:
|
||
|
mov al, bh
|
||
|
shr al, 4
|
||
|
|
||
|
cmp al, 0xA
|
||
|
jb .below_0xA
|
||
|
|
||
|
add al, 'A' - 0xA - '0'
|
||
|
.below_0xA:
|
||
|
add al, '0'
|
||
|
|
||
|
call print_char
|
||
|
|
||
|
shl bx, 4
|
||
|
loop .lp
|
||
|
|
||
|
ret
|