Anda di halaman 1dari 5

Arquitectura de computadores y ensambladores 1

Sección A

Kevin Manuel Mejía Grajeda 201408531

Manuela Técnico

La aplicación está escrita en código ensamblador Microsoft Macro Assembler (MASM) que es un
ensamblador de la familia x86, creado por Microsoft para el desarrollo del sistema operativos MS-
DOS.

La aplicación permite cargar archivos con extensión .arq que contengan hasta 20 números de dos
dígitos, separados por espacios y con signos aritméticos intercalados entre sí, para poder realizar
el cálculo aritmético de estos datos, mostrar la operación en notación postfija e infija. También
posee un módulo tipo calculadora que permite realizar cálculos aritméticos de dos números de
dos cifras. Por otra parte, posee un módulo para calcular la operación factorial de un rango de
números, que va del 0 al 8. La aplicación posee una sección de reportes que escribe en un archivo
de texto plano las operaciones realizadas durante su ejecución.

Secciones de código:

- Código relevante

Se utilizó la macro “imprime” para imprimir en consola toda la información necesaria para que el
usuario pueda interactuar con la aplicación

imprime macro cadena

mov ax,@data

mov ds,ax

mov ah,09

mov dx, offset cadena

int 21h

endm

También se realizó la macro “clear” que tiene la función de limpiar la pantalla. Facilitando así la
visualización de la aplicación.

clear macro

Mov Ah, 00H

Mov Al, 03H

Int 10H

endm
Este módulo solicita dos números y un operador aritmético, según el carácter, se realiza un salto
hacia el segmento de código que corresponda a la operación aritmética que debe realizarse.

calc:

mov bl,00H

mov al,00h

imprime ope1

mov ah,0dh

int 21h

mov ah,01h

int 21h

cmp al, variable

je var

sub al,30h

add bl, al

Mov numero1, al

mov cl, 01h

mov ah,01h

int 21h

cmp al,0dh

je siguiente

sub al, 30h

mov numero2, al

mov cl,09h

mov al,numero1

mul cl

add bl,al

add bl,numero2

mov numero1, bl

mov ah,01h
int 21h

resultado:

cmp signo,"+"

je sum

cmp signo,"-"

je resa

cmp signo,"*"

je multi

cmp signo,"/"

call divi

Este segmento de código realiza la suma de los bits de cada registro almacenados en las variables
numero1 y numero2, para ello se mueven las variables a los registros cl y al, se realiza la suma con
la instrucción add y se envía hacia la variable resulta, posteriormente se imprime la respuesta y se
pregunta si se desea realizar otra operación.

sum:

mov cl,numero3

mov al,numero1

add al,cl

mov result,al

aam

mov bx,ax

imprime res

mov ah,02h

mov dl," "

int 21h

mov ah,02h

mov dl,bh

add dl,30h

int 21h
mov dl,bl

add dl,30h

int 21h

jmp app

para el cálculo de factorial, solicitamos un número y se verifica que no exceda el limite (8) y si no
lo excede se procede a llamar a la función factorial que realiza recursivamente el cálculo de este.

facto:

mov resu,1

imprime Mensaje

mov dx, offset cadenanum

mov si,dx

mov byte ptr[si],2

mov ah,0ah

int 21h

sub ch,ch

mov cl,[si+2]

sub cl,"0"

cmp cl,9

je Errornum

cmp cl,0

je cero

xor al,al

mov al, cl

call factorial

mov cx,0

mov ax,resu

factorial proc near

cmp cx,1
je Fn

Push cx

dec cx

call factorial

mov ax,resu

pop cx

mul cx

mov resu,ax

Fn:

ret

factorial endp

Se utilizaron las interrupciones 21h para la lectura de caracteres de entrada y la interrupción 10h
en la macro para limpiar la pantalla.

Anda mungkin juga menyukai