Colección de citas famosas - Colección de firmas - ¿Cómo utilizar la programación en lenguaje ensamblador para mostrar caracteres chinos en la pantalla?

¿Cómo utilizar la programación en lenguaje ensamblador para mostrar caracteres chinos en la pantalla?

A través de la práctica, tengo una comprensión general del modo de trabajo en modo gráfico y el método de implementación básico de la compatibilidad con caracteres chinos. Mi trabajo es hacer que los cinco caracteres chinos "Sistema operativo de caracteres chinos" aparezcan en la pantalla después de que se inicia el sistema.

Nota: Aquí sólo se introduce el uso de fuentes de mapa de bits.

Preparación:

1. Primero se debe crear la información de celosía correspondiente.

Creemos una matriz de puntos de 16×16 de dos caracteres chinos. En realidad es muy simple. Dibujas una línea en el papel.

Sale cada cuadrado con 16 cuadrados y luego, según su tamaño, escribe una palabra dentro, como "成" y "construcción".

Si escribes de forma aproximada, Encontrarás que algunos cuadrados están atravesados ​​por los trazos del personaje, mientras que otros siguen siendo espacios.

Hijo, ahora marca los que no tienen trazos como 0 y los que tienen trazos como 1. A partir de la primera línea, márquelo.

Anota la información de la "matriz de puntos" de 16×16. Como hay 16 bits por línea, se necesitan 2 bytes para registrar una línea.

Líneas, ***16 líneas, por lo que se necesitan ***2×16=32 bytes para almacenar el "retículo" de una palabra.

Por ejemplo: Corea-》; 00000h, 04008h, 037fch, 01008h, 08208h, 06208h, 02210h, 00910h

01120h, 020A0h, 0E040h, 020A0h, 02110h, 0 2208h, 0240Eh, 00804h

Por supuesto, mi "mapa de bits" se carga desde otras fuentes, pero el método anterior definitivamente funcionará.

Básicamente, así es como se crea la red cristalina.

2. Escribe una subrutina para mostrar un píxel.

Tarea: Imprimir un píxel en la pantalla en modo gráfico.

Análisis:

Variables requeridas: valores de coordenadas iniciales x0, y0 de la esquina superior izquierda.

Parámetros predeterminados: La resolución predeterminada es el modo de color 640×480×16.

(Porque este es el modo admitido por el BIOS estándar VGA)

El color predeterminado son los caracteres amarillos sobre un fondo negro.

Implementación: (Consulte Tecnología de programación práctica VGA, Luo Jianjun, Tsinghua University Press, 1995).

;Función:

;Dibuja un punto con el color especificado en la posición especificada de la pantalla.

Parámetros de entrada:

Bx = coordenada x0 de x0 píxel en la pantalla.

Ax = la coordenada y0 del píxel y0 en la pantalla.

Cl = valor de color del píxel de color.

proceso writePix

linelen = 80 El número de bytes ocupados por la línea de escaneo en el modo de color 640*480*16.

;=width/8

;Calcular la posición del píxel

Push es

Push bp

Empujar dx

Empujar hacha

Empujar di

Empujar cx

Empujar bx

mov bp, sp

Versión 3 mov

shr bx, cl X0/8

mov cx, linelen

mul cx

Agregar ax, bx; donde ax es el desplazamiento del píxel y dx es el número de página.

mov di, ax

; Establecer registro de máscara de imagen

mov dx, secuencia_ctl

Episodio 2

EST

Compañía dx

mov al, 0fh se puede escribir en los cuatro planos.

EST

; Seleccione el modo de escritura 2

mov dx, graphi_ctl

Quinta película

EST

Corp dx

Episodio 2

EST

; Calcula el código de máscara y establece el registro del código de máscara de bits.

Diciembre dx

Episodio 8

Hora del Este

mov cx, [BP]; saca la coordenada x

p>

Y C1, 7

80 horas

Compañía shr austriaca

Compañía dx

Hora del este de EE. UU.

;Escribir datos

Los segmentos mov ax y vgasegES apuntan a la dirección de memoria 0a000h.

Mover, ax

mov ax, [BP+2]; tomar un valor de color

mov ah, es:[di]; registro de máscara.

movs: [di], al; escribir para mostrar memoria

Popular bx

Popular cx

popudi

Barril explosivo

Dx popular

Presión arterial popular

Canciones pop

Remojados en agua para suavizar

writePix endp

3. Escribe una subrutina para generar un carácter gráfico de un carácter chino. Con la base de 2, este paso es relativamente fácil de implementar.

Como se muestra a continuación:

; Mostrar caracteres chinos en modo gráfico

; Parámetros de entrada:

; coordenadas x de la esquina

ax = y0 coordenada y superior izquierda inicial

cx = color es en realidad solo el cl del color.

; ds:si = la primera dirección de la información de la matriz de puntos del carácter buff.

;Valor de retorno: Ninguno

Proceso DispZhC

Empujar si

Empujar bp

Empujar hacha

p>

Empujar bx

Empujar cx

Empujar dx

mov bp, sp

XOR dx , dx; Dx Línea actual

jmp a1

Pantalla:

Empresa si

inc si apunta a la siguiente palabra

inc Agrega uno al número de filas dx

a1:

cmp dx, 16; el comportamiento actual es 0-15 porque es una red de 16*16.

Terminé

xor cx, CX; inicialización de la columna actual de Cx

mov bx, palabra ptr [si]; línea Representado por dos bytes.

Pantalla:

cmp cx, 16

je Disp line feed

o cx, CX clear CF

<; p >shl bx, 1

jc DispP Si el bit actual es 1, se muestra un punto.

inc cx

pantalla jmp

display:

empujar hacha

empujar bx

Empujar cx

mov ax, [pb+6]

Agregar ax, dx

mov bx, [pb+4]

Agregar bx, cx

mov cx, [BP+2]; el valor del color está en cl.

Llamar writePix

Popular cx

inc cx

Popular bx

Barril explosivo

visualización jmp

Completo:

Popular dx

Popular cx

Popular bx

Barril de explosión< /p >

Presión arterial popular

Paps

Remojadas en agua para suavizarlas

DispZhC endp

Escribe un. subrutina de cadena de salida.

Tarea: Ya tienes una subrutina que muestra un carácter, ahora debes llamarla de forma continua y completa.

Muestra de manera efectiva todas las matrices de puntos de caracteres chinos en el búfer.

Análisis:

Variables requeridas: la esquina superior izquierda inicial coordina x0, y0 de toda la cadena.

Longitud de la cadena

Las coordenadas X1 e Y1 de la esquina superior izquierda pasan a la subrutina al mostrar cada carácter.

Parámetros predeterminados: el valor predeterminado es 16 celosías.

El espaciado entre palabras predeterminado es de 5 píxeles.

Estructura principal del programa:

Un único bucle que se repite según la longitud de la cadena.

Mi experiencia:

; Muestra una cadena de longitud especificada en modo gráfico.

;Parámetros de entrada:

;La primera dirección del búfer de matriz de puntos de cadena.

;ax = y0La coordenada y de la esquina superior izquierda del primer carácter de la cadena.

; bx = x0 La coordenada x de la esquina superior izquierda del primer carácter de la cadena.

ch=n

cl=color

Valor de retorno: Ninguno

def dis = 5 cada dos símbolos El espaciado predeterminado entre son de 5 píxeles.

ancho de carácter = 16; el valor predeterminado es 16 puntos, que también es el ancho de píxeles de cada carácter.

Mostrar proceso

Empujar bp

Empujar hacha

Empujar bx

Empujar ds

Empujar si

Empujar cx

Empujar dx

mov bp, sp

XOR dx, dx

jmp s1

next char:; apunta al siguiente carácter que se generará.

Agregar si, 32

Agregar bx, DefDis+CharWidth

s1:

cmp dh, ch si el número especificado es; carácter de salida?

Estoy dispuesto

Llamar a DispZhc

Empresa dh

jmp nextChar

Hecho:

Dx popular

Cx popular

Pops

Cámara digital popular

Bx popular

Tubo de explosión

Presión arterial popular

Remojar en agua para suavizar

DispZhS endp

5. /p>

;Ingrese al modo de color 640×480×16.

Modo de configuración:

Para 640*480*16 y 320*, 200*256 es el modo VGA estándar, que son 12 h y 13 h respectivamente en varios VGA.

mov ax, 12h

int 10h 19_24 rar (39,92 KB)

Algunas reflexiones sobre el apoyo de China;

1. " Conjunto de caracteres" es sólo una abstracción de alto nivel del problema para el usuario.

Cuando guardas un documento chino en un disquete y te lo llevas a casa, este contiene un conjunto de códigos en un "juego de caracteres" que define de forma estandarizada el único chino que existe en el mundo real. personaje. Pero, por otro lado, ¿los códigos en sí no explican ninguna otra información sobre el carácter chino, como por ejemplo la pronunciación? ¿radical? Espere, cuando vea este documento en otra máquina, debe haber una "capa de visualización" entre el humano y la computadora, no importa cómo se implemente esta capa de visualización. Lo único importante es que también debe conocer la correspondencia entre códigos y caracteres chinos. Cuando lee el código en el "conjunto de caracteres", convertirá el código estándar en su propio código de información de fuente a través de la tabla de conversión de códigos que mantiene, que es un proceso de búsqueda de tablas.

2. Esto significa que lo que importa es el estándar, no la implementación. Cuando desea mostrar caracteres chinos en una plataforma en inglés, la única dificultad es determinar un conjunto de caracteres estándar que no entre en conflicto entre sí. En cuanto a qué forma se muestra, no es ningún problema.

3. Para garantizar la compatibilidad y el rendimiento multiplataforma, desde la perspectiva del software, es mejor traer sus propias fuentes. A través de este ejemplo, queda claro cómo traer tus propias fuentes. De hecho, dado que el programa implementado aquí generalmente lee la información de la fuente en palabras en lugar de bytes, el código en la fuente de mapa de bits no se puede usar directamente, por lo que los dos lados de la palabra son exactamente opuestos y deben intercambiarse cada dos bytes para una visualización correcta. Pero no es difícil lograr la universalidad modificando el código en DispZhC.

4. El principio de los glifos vectoriales es el mismo, pero requiere más matemáticas para que sepamos para qué sirve la teoría. Considere por qué algunos gurús de la informática comenzaron por pasión por los juegos.