10.完善内核-实现打印字符串
程序员文章站
2024-03-07 23:00:18
...
上一节通过控制显存实现了打印单个字符,这一节调用上一节的函数来实现打印字符串。
在print.S中添加:
global put_str ;全局声明
put_str:
push ebx
push ecx ;备份ebx,ecx
xor ecx, ecx
mov ebx, [esp + 12] ;从栈中取出字符串的地址
.goon:
mov cl, [ebx] ;挨个读出字符
cmp cl, 0 ;判断是否是终止字符'\0',ASCII就是0
jz .str_over
push ecx
call put_char
add esp, 4
inc ebx
jmp .goon
.str_over:
pop ecx
pop ebx ;恢复现场
ret
同样,在print.h中添加函数的声明.
void put_str(uint8_t* message);
main.c
#include "print.h"
void main(void) {
put_char('k');
put_char('e');
put_char('r');
put_char('n');
put_char('e');
put_char('l');
put_char('\n');
put_char('1');
put_char('2');
put_char('\b');
put_char('3');
put_str(" I am kernel!\n");
while(1);
}
put_str打印两个空格,然后打印 I am kernel! ,最终回车。
结果如图。
上一篇: 拉格朗日乘数法
下一篇: yii2简单使用less代替css示例