《自己动手写操作系统》中的一个小问题,大家帮忙来看看!
; ------------------------------------
; 显示 AL 中的数字
; 默认地:
;数字已经存在 AL 中
;edi 始终指向要显示的下一个字符的位置
; 被改变的寄存器:
;ax, edi
; ------------------------------------
DispAL:
pushecx
pushedx
movah, 0Ch; 0000: 黑底 1100: 红字
movdl, al
shral, 4
movecx, 2
.begin:
andal, 01111b
cmpal, 9
ja.1
addal, '0 '
jmp.2
.1:
subal, 0Ah
addal, 'A '
.2:
mov[gs:edi], ax
addedi, 2
moval, dl
loop.begin
addedi, 2;/*这句似乎是多余的,因为循环体每次循环都给edi加上2了,这里似乎是一个错误,这样一来,edi指向的两个字节就是没有初始化的两个字节,难道是显示一个空位(空格)吗?*/
popedx
popecx
ret
; DispAL 结束-------------------------
[解决办法]
哦,明白了,脑筋一时转不过弯来,呵呵。