Sistema operativo-Sistema operativo-Impresión de pantalla en el núcleo (Parte 2)

Sistema operativo-Sistema operativo-Impresión de pantalla en el núcleo (Parte 2)

Siga la secuencia de implementación anterior para implementar PrintString

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

La operación de limpiar la pantalla es la siguiente

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);
}

Implementación de 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进制的字符串打印
}

Implementé la interfaz funcional antes y luego implementé la interfaz funcional restante
int PrintIntDec (int c) -código de deducción recursiva
implementación-decimal

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;
}

Sistema operativo-Sistema operativo-Impresión de pantalla en el núcleo (Parte 2)
Seguimiento del cursor en modo protegido - operación de dos puertos designados diferentes La
Sistema operativo-Sistema operativo-Impresión de pantalla en el núcleo (Parte 2)
figura anterior muestra la configuración del cursor de los ocho bits superiores y los ocho bits inferiores La implementación del código se ha implementado en la función int SetPrintPos (short w, short h). El código de ensamblaje de colocar el cursor en los 8 bits superiores y los 8 bits inferiores está incrustado en el código de lenguaje C

Experimentos y resultados acordes con los resultados esperados

Sistema operativo-Sistema operativo-Impresión de pantalla en el núcleo (Parte 2)Sistema operativo-Sistema operativo-Impresión de pantalla en el núcleo (Parte 2)
El código relacionado con el experimento se guarda en esta dirección y se puede descargar si es necesario https://down.51cto.com/13465106/up

resumen

1. El compilador GCC solo admite ensamblaje en línea en formato AT&T
2. La función PrintCha () se puede realizar mediante ensamblaje
3. PrintCha () es la base de otras funciones de impresión de pantalla
4. La posición del cursor se puede establecer operando los puertos 0x03D4 y 0x03D5

Supongo que te gusta

Origin blog.51cto.com/13475106/2551651
Recomendado
Clasificación