(第三章 11)克勤克俭用内存——DispStr函数显示字符串

DispStr调用方法:
[SECTION .data1]
[BITS 32]
...
_szPMMessage: db "In Protect Mode now. ^-^",0Ah,0Ah,0 ;保护模式显示
szPMMessage equ _szPMMessage - $$
push  szPMMessage
call  DispStr
add   esp,  4

DispStr实现:

DispStr:
push ebp
mov ebp, esp       ;-->esp中放的是TopOfStack指针,指向栈顶(高地址)
push ebx
push esi
push edi

mov esi, [ebp+8]
mov edi, [dwDispPos]
;_dwDispPos: dd (80 * 6 + 0) * 2; 屏幕第6行, 第0列,是屏幕上下一个显示的位置
;dwDispPos equ _dwDispPos - $$
mov ah, 0Fh

.1:
lodsb ;lodsb-->将esi中的一个字节放到AL中
test al, al
jz .2 -->不是结束字符0
cmp al, 0Ah;
jnz .3 -->是“非回车的字符”
;是“回车”的时候
... ;作回车需要的相应处理
.3:
mov [gs:edi], ax
add edi, 2
jmp .1
.2:
mov [dwDispPos], edi

pop edi
pop esi
pop ebx
pop ebp
ret

你可能感兴趣的:(OS)