操作系统开发之——打印字符

我们在上一篇文章中提到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

操作系统开发之——打印字符的相关文章

ASCII 可打印字符与控制字符

2017-08-16 21:29:30 基本的 ASCII 字符集共有 128 个字符,其中有 95 个可打印字符,包括常用的字母.数字.标点符号等,另外还有 33 个控制字符.标准 ASCII 码使用 7 个二进位对字符进行编码,对应的 ISO 标准为 ISO646 标准. 控制字符 在ASCII码中,第0-31号及第127号(共33个),换句话说就是小于32的都是控制字符或通讯专用字符,如控制符:LF(换行).CR(回车).FF(换页).DEL(删除).BS(退格).BEL(振铃)等:通讯专

Linux内核系列—13.c.操作系统开发之进程之中断重入

现在又出现了另外一个的问题,在中断处理过程中是否应该允许下一个中断发生? 让我们修改一下代码,以便让系统可以在时钟中断的处理过程中接受下一个时钟中断.这听起来不是个很好的主意,但是可以借此来做个试验. 首先,因为CPU在响应中断的过程中会自动关闭中断,我们需要人为地打开中断,加入sti指令:然后,为保证中断处理过程足够长,以至于在它完成之前就会有下一个中断产生,我们在中断处理例程中调用一个延迟函数.代码如下: extern delay hwint00: ; Interrupt routine f

Base64就是一种 基于64个可打印字符来表示二进制数据的表示方法

Base64编码是从二进制到字符的过程. Base64编码主要用在传输.存储.表示二进制等领域,还可以用来加密,但是这种加密比较简单. byte[] byteArray = Encoding.UTF8.GetBytes(content);content = Convert.ToBase64String(byteArray); 开发者对 Base64编码肯定很熟悉,是否对它有很清晰的认识就不一定了.实际 上Base64已经简单到不能再简单了,如果对它的理解还是模棱两可实在不应该.大概介绍一下Bas

C++例题1:输出可打印字符

#include<iostream>#include<stdlib.h>#include<cctype>int main(){ int i;char a=0; for(i=0;i<128;i++) { if(isprint(a)) { std::cout<<a<<" "; std::cout<<std::dec<<i<<" "; std::cout<<s

Linux c字符串中不可打印字符转换成16进制

本文由 www.169it.com 搜集整理 如果一个C字符串中同时包含可打印和不可打印的字符,如果想将这个字符串写入文件,同时方便打开文件查看或者在控制台中打印出来不会出现乱码,那么可以将字符串中的不可打印字符转换成16进制,此处提供一个函数供使用: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 void printhex(unsigned char *src,int len) {     

打印字符

描述 输入一个ASCII码,输出对应的字符. 输入一个整数,即字符的ASCII码,保证存在对应的可见字符.输出一行,包含相应的字符.样例输入 65 样例输出 A源代码: #include <stdio.h> int main() { int a; scanf ("%d", &a); printf ("%c\n", a); return 0; }

console.log在控制台打印字符画

五一节太闲了,竟研究起这个来… 需要软件 Sublime Text ASCII Generator 步骤 用ASCII Generator生成字符画,复制到js文件,直接console.info出来. 当然不可能这么顺利的,会报错 Uncaught SyntaxError: Unexpected token ILLEGAL 原因是字符画中包含有“回车换行符”,整日敲代码的你肯定知道,把不能识别的回车换成\n就行了. 这么多行一个个加\n未免太慢了,那就该神器Sublime该出场了. 想必你已经知

Linux内核系列—11.操作系统开发之ELF格式

ELF文件的结构如下图所示: ELF文件由4部分组成,分别是ELF头(ELF header).程序头表(Program header table).节(Sections)和节头表(Section header table). 实际上,一个文件中不一定包含全部这些内容,而且它们的位置也未必如上图所示这样安排,只有ELF头的位置是固定的,其余各部分的位置.大小等信息由ELF头中的各项值来决定. ELF header的格式如下代码所示: #define EI_NIDENT 16 typedef str

1-2-08:打印字符

总时间限制: 1000ms 内存限制: 65536kB 描述 输入一个ASCII码,输出对应的字符. 输入 一个整数,即字符的ASCII码,保证存在对应的可见字符. 输出 一行,包含相应的字符. 样例输入 65 样例输出 A #include<stdio.h> int main() { int f; scanf("%d",&f); printf("%c\n",f); return 0; }