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 58Como 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