¿Cómo utilizar la programación en lenguaje ensamblador para mostrar caracteres chinos en la pantalla?
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 p>
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>
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, 1jc 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.