标签:端口 -- 遇见 接口 指定 https 模式 char 16进制
操作系统-操作系统-内核中的屏幕打印(下)int PrintString(const char* s)//需f要对参数进行判断,如果参数为空,返回-1
{
int ret = 0;
if( s != NULL )
{
while( *s )
{
ret += PrintChar(*s++);//不为空时进行循环,直到遇见结束符结束
}
}
else
{
ret = -1;
}
return ret;
}
//在这里需要单独对NULL进行定义 kernel.h
#ifndef KERNEL_H
#define KERNEL_H
#define NULL ((void*)0)
#endif
屏幕清空的操作如下
void ClearScreen()//二重循环对屏幕每一个位置打印空字符
{
int h = 0;
int w = 0;
SetPrintPos(0, 0);
for(h=0; h<SCREEN_HEIGHT; h++)
{
for(w=0; w<SCREEN_WIDTH; w++)
{
PrintChar(‘ ‘);
}
}
SetPrintPos(0, 0);
}
PrintIntHex()的实现
int PrintIntHex(unsigned int n)
{
char hex[11] = {‘0‘, ‘x‘, 0};//将整数进行转换
int i = 0;
for(i=9; i>=2; i--)
{
int p = n & 0xF;//位与判断
if( p < 10 )
{
hex[i] = (‘0‘ + p);//将0-9数字转换为字符
}
else
{
hex[i] = (‘A‘ + p - 10);//当低四位大于10,A B C
}
n = n >> 4;//将N右移四位
}
return PrintString(hex);//16进制的字符串打印
}
在之前实现了其中的函数接口,接下来对剩下的函数接口进行实现
int PrintIntDec(int c)--递归推导
代码实现-十进制
int PrintIntDec(int n)
{
int ret = 0;
if( n < 0 )
{
ret += PrintChar(‘-‘);//多打印一个字符
n = -n;
ret += PrintIntDec(n);
}
else
{
if( n < 10 )
{
ret += PrintChar(‘0‘ + n);
}
else
{
ret += PrintIntDec(n/10);
ret += PrintIntDec(n%10);
}
}
return ret;
}
操作系统-操作系统-内核中的屏幕打印(下)
在保护模式下的光标跟踪-两个不同指定端口的操作
操作系统-操作系统-内核中的屏幕打印(下)
上图所示的是高八位与低八位的光标设置,代码实现已经在int SetPrintPos(short w, short h)函数中进行实现,将光标设置高8位与低8位的汇编代码内嵌到C语言代码中
实验与结果-符合预期的结果
操作系统-操作系统-内核中的屏幕打印(下)操作系统-操作系统-内核中的屏幕打印(下)
与该实验相关的代码在该地址进行保存,需要可以进行下载https://down.51cto.com/13465106/up
小结
1.GCC编译器只支持AT&T格式的内嵌汇编
2.通过汇编的方式可实现PrintCha()函数
3.PrintCha()是其它屏幕打印函数的基础
4.通过操作0x03D4与0x03D5端口对光标位置进行设置
标签:端口 -- 遇见 接口 指定 https 模式 char 16进制
原文地址:https://blog.51cto.com/14308904/2553250