Ir al contenido principal

Imprimir número (Ensamblador)


Trabajando con operaciones que involucren cifras numéricas en ensamblador, queremos escribir los resultados ya sea en la consola o en un archivo, y aquí es donde este macro me ha sacado la tarea.

¿Hay alguna condición para imprimir los números?

Podemos trabajar con la base que queramos, porque el compilador lo convierte a una misma base según la operación que realicemos.

¿Qué necesita el macro?

Este macro necesita la reserva de memoria para los dígitos ASCII del número a escribir
    res db 4 dup('$')
A sí mismo, se puede declarar de un número como el siguiente: 
    number db 58
Como también enviar el número a través de uno de los registros o directamente

Nemónimos a utilizar

  • MOV destino, fuente: Transfiere el valor del registro fuente hacia el registro destino.
  • DIV divisor: Realiza la división aritmética del registro AX entre el registro que se envía. este nemónimo utiliza el registro DX para almacenar el residuo, por lo que este debería ser 0 antes de ejecutar la operación.
  • ADD destino, fuente: Realiza la suma aritmética sin acarreo del registro destino y el registro fuente, el resultado lo almacena en el registro destino.
  • PUSH registro: Agrega el registro a la pila.
  • POP registro: Extrae el valor de la cima de la pila y lo almacena en el registro dado.
  • INC registro: Incrementa uno el registro enviado.
  • CMP destino, fuente: Realiza una comparación aritmética entre el registro destino y el registro fuente, llenando las banderas CF, ZF, OF, SF y PF.
  • JA punto: Realiza un salto condicional a la dirección definida sii el registro destino es mayor al registro fuente en la comparación anterior.

Macro utilizado

    numAscii MACRO num
        LOCAL extractDig, convertDig
        mov ax, num
        mov cx, 0
        mov bx, 10
        
        extractDig:
            mov dx, 0
            div bx
            push dx
            inc cx
            cmp ax, 9
            ja extractDig
        
        inc cx
        mov bx, 0
        convertDig:
            add al, 30h
            mov res + bx, al
            
            pop ax
            inc bx
        LOOP convertDig
        mov res + bx, '$'
    ENDM

Ejemplo

Este y más ejemplos de macros lo tengo en mi GitHub. Entra aquí

Comentarios

Entradas populares de este blog

Imprimir texto (Ensamblador)

Cuando trabajamos en ensamblador tendremos la necesidad de mostrar textos en la pantalla, ya sea para informar una acción, comunicar una solicitud o mostrar un resultado, este macro te va a ser de utilidad tanto como a mí. ¿Qué es una cadena de texto? Una serie de caracteres finalizada por dolar '$', el dolar le indica al compilador que el texto finalizó. ¿Que necesita el macro? El macro necesita que se reserve una cadena de texto como la siguiente declaración: string db 7 dup('$') dónde:  string  Identificador del comienzo de la cadena de texto db  Le dice al compilador que la 'variable' será de tipo byte 7  Cantidad de caracteres que contiene la cadena de texto dup('$')  Llena la cadena de texto con el carácter dolar Funciones a utilizar Para imprimir un carácter Función : 02h Interrupción : 21h Para imprimir una cadena de texto Función : 09h Interrupción : 21h

Kits 2012 para FIFA 07

Kits de algunas selecciones nacionales y algunos clubes para FIFA 07: