我们在上一篇文章中提到Bootsect如何制作,接着我们来做打印字符,(某些朋友可能认为打印字符是最重要的,嘻嘻)
直接贴代码:
_ASM_Print_String: push ebp mov ebp, esp mov esi, [ebp + 8] ; pszInfo mov edi, [POS] mov ah, [ebp + 12] ; color .1: lodsb test al, al jz .2 cmp al, 0Ah ; 是回车吗? jnz .3 push eax mov eax, edi mov bl, 160 div bl and eax, 0FFh inc eax mov bl, 160 mul bl mov edi, eax pop eax jmp .1 .3: mov [gs:edi], ax add edi, 2 jmp .1 .2: mov [POS], edi pop ebp ret
这段代码就不用解释了把,可以直接用GLOBAL导出当函数用,相信学过汇编的朋友都知道什么意思,不过有几点要解释一下,POS是记录光标位置,读者朋友在使用这段代码是要加上定义:“POS: DD 0”,还有,要把GS段选择子的偏移设置为0xB8000,为什么要这样设置呢?因为Intel的大叔归定这一段地址归显存使用,当然,我们可是用的80X25的字符显示模式,如果读者要制作操作系统的话,要加上一段代码:“
;设置显示方式
MOV AX,0x03;AL = 0x03,AH = 0
INT 0x10”
当然,还不能关闭中断,(CLI),如果读者还有什么问题可以找我:我的Email:[email protected]
如果读者有开发操作系统的想法可以联系我哦。
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-08-28 12:26:45