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