domingo, 13 de septiembre de 2009

Calculadora en Lenguaje Ensamblador (ASM)


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".

  1. Escrito totalmente en ensamblador, ninguna librería externa para entrada y salida, solo interrupciones.
  2. 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. 
  3. Multiplicar usando sumas repetidas en lugar de la operación nativa "mult".
  4. División mediante contadores y restas repetidas en lugar de la operacion "div". 
  5. Convierte cadenas de números a binario y vice versa  para manejar la captura de datos y para desplegar el resultado. 
  6. Incluye funciones basicas como GetCh, PutCh, Write, WriteLine
  7. Funciones para leer y escribir números de 128 bits. Read128BitNum, Write128BitNum
  8. Menú simple en modo texto. 
  9. 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. 

Menu Principal


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

Entradas Relacionadas