📄 string.asm
字号:
global PM_DispStr
global PM_DispInt
_Disposition dd (15*80+0)*2 ;保护模式下显示字符串位置
PM_Disposition equ _Disposition
PM_DispStr:
push ebp
mov ebp,esp
push esi
push edi
push eax
push ebx
push edx
mov esi,[ebp+8]
mov edi,[PM_Disposition]
.1:
lodsb
test al,al
jz .2
cmp al,0a0h
jz .3
mov ah,0fh
mov [gs:edi],ax
add edi,2
jmp .1
.3
xor edx,edx
mov eax,edi
mov ebx,160
div ebx
inc eax
mul ebx
cmp edx,0
jnz .4
mov edi,eax
jmp .1
.4:
jmp $
.2
mov [PM_Disposition], edi
pop edx
pop ebx
pop eax
pop edi
pop esi
mov esp,ebp
pop ebp
ret
;以16进制输出al中的数字
;影响寄存器:无
PM_DispAL
push ebp ;1046d
mov ebp,esp
push edi
push edx
push ecx
push eax
mov edi,[PM_Disposition]
mov dl,al
shr al,4
mov ecx,2
.1
cmp al,9
ja .2
add al,'0'
jmp .3
.2
sub al,10
add al,'A'
.3
mov ah,0fh
mov [gs:edi],ax
add edi,2
mov al,dl
and al,0fh
loop .1
mov [PM_Disposition],edi
pop eax
pop ecx
pop edx
pop edi
mov esp,ebp
pop ebp
ret
;以十六进制输出4字节大小的整型值
;影响寄存器:无
PM_DispInt:
push ebp
mov ebp,esp
push edi
push eax
mov eax,[ebp+8]
push eax
shr eax,24
call PM_DispAL
mov eax,[esp]
shr eax,16
call PM_DispAL
mov eax,[esp]
shr eax,8
call PM_DispAL
pop eax
call PM_DispAL
mov ah,0fh
mov al,'H'
mov edi,[PM_Disposition]
mov [gs:edi],ax
add edi,2
mov [PM_Disposition],edi
pop eax
pop edi
mov esp,ebp
pop ebp
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -