Como imprimo números en la memoria de video?
Buenas, estoy comenzado a programar en ensamblador y me tropecé con un problema, se trata de que cuando quiero imprimir algo en la memoria de video lo hago caracter por caracter, lo malo es que tengo un contador y necesito que vaya imprimiendo el número, por ejemplo cuando quiero imprimir 24H no me aparece ni el 24H ni el 36, la pregunta serÃa ¿como hago para que la memoria de video no interprete el número como el número de caracter en ascii sino que interprete el número como tal para imprimirlo?
Les agradezco desde ahora sus respuestas
Les agradezco desde ahora sus respuestas
Hola,
Supongo que estaras hablando del modo texto ¿Verdad?
En este modo la direccion comienza, creo recordar, en el segmento B800. Cada caracter en pantalla tiene asociado dos bytes. El primero es de control (color, si parpadea, etc..) el segundo es el codigo ASCII del caracter a representar.
Para representar un "24H" tienes que imprimir el codigo ascii equivalente al 2, el codigo ascii equivalente al 4 y el codigo ascii equivalente a la H. Tendras que transformar el numero en cuestion en letras en codigo ascii.
Un saludo.
Supongo que estaras hablando del modo texto ¿Verdad?
En este modo la direccion comienza, creo recordar, en el segmento B800. Cada caracter en pantalla tiene asociado dos bytes. El primero es de control (color, si parpadea, etc..) el segundo es el codigo ASCII del caracter a representar.
Para representar un "24H" tienes que imprimir el codigo ascii equivalente al 2, el codigo ascii equivalente al 4 y el codigo ascii equivalente a la H. Tendras que transformar el numero en cuestion en letras en codigo ascii.
Un saludo.
esta rutina la puedes ensamblar con el A86, los numeros son en hexa,
si usas otro assembler quizas tengas que cambiar la base y agregar
algunas directivas.
PUSH AX
MOV AX,0B800 ;segmento de VGA, 0B00 si el video es monocromo.
MOV ES,AX
POP AX
MOV DI,0 ;offset VGA, esquina superior izquierda de la pantalla.
MOV AL,2 ; color verde.
MOV AH,024 ;caracter "$".
MOV ES:[DI],AX ; imprimir el caracter.
RET
buenas tardes.
!!! Correccion
En mi respuesta anterior falta un 0 (cero) en la segunda linea de codigo, deberia ser asi:
MOV AX,0B800 ;segmento de VGA, 0B000 si el video es monocromo.
de lo contrario puedes aterrizar en otra zona de la memoria con consecuencias desconocidas,
disculpas :-|
En mi respuesta anterior falta un 0 (cero) en la segunda linea de codigo, deberia ser asi:
MOV AX,0B800 ;segmento de VGA, 0B000 si el video es monocromo.
de lo contrario puedes aterrizar en otra zona de la memoria con consecuencias desconocidas,
disculpas :-|
