PageRenderTime 43ms CodeModel.GetById 20ms app.highlight 4ms RepoModel.GetById 16ms app.codeStats 0ms

/asm/boot/test/console.s

http://github.com/dennis-gemini/tests
Assembly | 176 lines | 155 code | 21 blank | 0 comment | 0 complexity | eeade27587de69822e4409188ed01693 MD5 | raw file
  1.code16
  2.text
  3
  4#############################################
  5#
  6# print string
  7#
  8# input:
  9# 	%ds:%si = asciiz string
 10#
 11#############################################
 12
 13.global print
 14print:
 15	push    %ax
 16	push    %si
 171:
 18	lodsb
 19	orb     %al, %al
 20	jz      2f
 21	mov     $0x0e, %ah
 22	int     $0x10
 23	jmp     1b
 242:
 25	pop     %si
 26	pop     %ax
 27	ret
 28
 29#############################################
 30#
 31# print one character
 32#
 33# input:
 34#       %al = ascii
 35#
 36#############################################
 37.global putchar
 38putchar:
 39	push    %ax
 40	mov     $0x0e, %ah
 41	int     $0x10
 42	pop     %ax
 43	ret
 44
 45.if 0
 46#############################################
 47#
 48# print integer in hexdecimal string
 49#
 50# input:
 51#       %ax = integer
 52#
 53#############################################
 54
 55.global print_hex
 56print_hex:
 57	push    %ax
 58	push    %cx
 59	push    %si
 60
 61	mov     $(str_hex_prefix), %si
 62	call    print
 63
 64	mov     %ax, %si
 65	mov     $4, %cx
 661:
 67	shl     $4, %si
 68	shr     $12, %ax
 69	call    to_hex_char
 70	call    putchar
 71	mov     %si, %ax
 72	loopnz  1b
 73
 74	pop     %si
 75	pop     %cx
 76	pop     %ax
 77	ret
 78
 79to_hex_char:
 80	add     $'0', %al
 81	cmp     $'9', %al
 82	jbe     1f
 83	add     $('a' - ('9' + 1)), %al
 841:
 85	ret
 86
 87str_hex_prefix: .ascii " 0x\0"
 88.endif
 89
 90#############################################
 91#
 92# print integer in decimal string
 93#
 94# input:
 95#       %ax = integer
 96#
 97#############################################
 98
 99.global print_dec
100print_dec:
101	push    %ax
102	push    %bx
103	push    %cx
104	push    %dx
105
106	mov     $4, %cx
107	mov     $divisors_of_tens, %bx
1081:
109	xor     %dx, %dx
110	divw    (%bx)
111
112	or      %ax, %ax
113	jz      2f
114	add     $'0', %al
115	call    putchar
1162:
117	mov     %dx, %ax
118	add     $2, %bx
119	loopnz  1b
120
121	add     $'0', %al
122	call    putchar
123
124	mov     $'\r', %al
125	call    putchar
126	mov     $'\n', %al
127	call    putchar
128
129	pop     %dx
130	pop     %cx
131	pop     %bx
132	pop     %ax
133	ret
134
135divisors_of_tens: .short 10000, 1000, 100, 10
136
137#############################################
138#
139# show the rolling bar at cursor
140#
141#############################################
142
143.if 0
144.global step_it
145step_it:
146	push    %ax
147	push    %bx
148	push    %cx
149	push    %si
150	mov     $str_msg_step, %si
151	mov     $str_cur_step, %bx
152	movb    (%si), %al
153	mov     $4, %cx
1541:
155	cmpb    %al, (%bx)
156	jz      2f
157	inc     %bx
158	loopnz  1b
159	jmp     3f
1602:
161	sub     $str_cur_step, %bx
162	add     $str_next_step, %bx
163	movb    (%bx), %al
164	movb    %al, (%si)
165	call    print
1663:
167	pop     %si
168	pop     %cx
169	pop     %bx
170	pop     %ax
171	ret
172
173str_cur_step:   .ascii "\\|/-"
174str_next_step:  .ascii "|/-\\"
175str_msg_step:   .ascii "\\\b\0"
176.endif