Calculadora en Ensamblador NASM (Código Fuente Incluido)
Este programa esta totalmente escrito en ensamblador y el objetivo del mismo es realizar las 4 operaciones básicas, suma, resta, multiplicacion y división. La suma y resta tolera números de hasta 20 dígitos, la multiplicacion y división tolera números de hasta 10 dígitos. El código fue desarrollado para el ensamblador NASM, como restricción extra las operaciones de multiplicacion y división fueron implementadas como sumas y restas repetidas sin utilizar "mul" o "div".
- Escrito totalmente en ensamblador, ninguna librería externa para entrada y salida, solo interrupciones.
- Internamente utiliza una representación de 128 bits para almacenar, los operandos y el resultado. El requerimiento original fue el de soportar sumas y restas de hasta 20 dígitos y multiplicaciones y divisiones con 10 dígitos.
- Multiplicar usando sumas repetidas en lugar de la operación nativa "mult".
- División mediante contadores y restas repetidas en lugar de la operacion "div".
- Convierte cadenas de números a binario y vice versa para manejar la captura de datos y para desplegar el resultado.
- Incluye funciones basicas como GetCh, PutCh, Write, WriteLine
- Funciones para leer y escribir números de 128 bits. Read128BitNum, Write128BitNum
- Menú simple en modo texto.
- Fácil de modificar y recompilar, ya que incluye todos los archivos necesarios y ademas un script para reconstruir la aplicación.
Por ejemplo, esta secuencia de imágenes, muestra como realizar una Suma.
y para números mas grandes
Algunas de las funciones usadas en este proyecto.
GetCh
Esta función lee un carácter del teclado y coloca el valor ASCII en el registro AL.; funcion GetCh ; ascii tecla presionada ; Salida en al codigo ascii sin eco, via BIOS GetCh: xor ah,ah ; int 0x16 ; ret ;
PutCh
esta función escribe un carácter en pantalla.; funcion PutCh ; imprimir el caracter ascii en al, en pantalla ; Parametro al el caracter a imprimir PutCh: mov ah, 0x0E ; int 0x10 ; ret ;
Write
esta funcion permite mostrar una cadena de caracteres en pantalla.
; funcion Write ; muestra una cadena en pantalla ; ; parametro dx direccion de la cadena ; la cadena debe terminar con '$' Write: push ax ; respaldar ax mov ah,0x9 ; func 9, imprimir en pantalla int 0x21 ; interrupcion DOS pop ax ; restaurar ax ret ; return
Ejemplo de Uso
mov dx, Msg1 ; call Write ; SEGMENT data ; data inicializada Msg1 DB "(1) SUMA -> RESULTADO = A + B $"
WriteLn
; funcion Writeln ; string + newline ; parametro dx direccion de la cadena Writeln: call Write ; imprimir cadena usando write mov dx,CRLF ; direccion de la cadena "newLine" call Write ; imprimir newline ret ; return
Este video muestra como utilizar el codigo fuente para modificar y reconstruir la aplicacion
Descargar Codigo Fuente