Sunteți pe pagina 1din 7

;------------------------------; TABLAS DE OPERACIONES +,-,*,/ ; Y SUMATORIA DE UN NUMERO ;------------------------------; ;EL PROGRAMA LEE UN CARACTER (NUMERO) ;Y OTRO PARA SABER

LA OPERACION, SI EL ;NUMERO ES MAYOR O IGUAL A 10 SE ;MUESTRA LA SUMATORIA DEL NUMERO, ;COMENZANDO DESDE EL VALOR DEL NUMERO ;INGRESADO Y REDUCIENDO DE 1 EN 1 HASTA 0 ;CASO CONTRARIO SE IMPRIME LA TABLA ;CORRESPONDIENTE A LA OPERACION DESIGNADA. ; ;MICROPROCESADOR: INTEL-8086 ;AUTOR: NIELS SAAVEDRA ;FECHA: 17-MAYO-2013 .ORG 100h ;-----------------------------; MACROS ;-----------------------------;IMPRIME CARACTER PrintChar MACRO char PUSH AX PUSH DX MOV AH,02h ;SUB-FUNCION DE 21h ;PARA IMPRIMIR CARACTER MOV DL,char ;CARACTER A IMPRIMIR INT 21h POP DX POP AX ENDM ;################################ ;## ## ;## IMPRIME NUMERO (2 DIGITOS) ## ;## ## ;################################ PrintNum MACRO num LOCAL MayorNueve,SeguirRestando,Fin PUSH AX PUSH BX CMP num,9 JA MayorNueve ADD num,'0' PrintChar num JMP Fin

MayorNueve: MOV BL,0 SeguirRestando: SUB num,10 INC BL CMP num,9 JA SeguirRestando ADD BL,'0' PrintChar BL ADD num,'0' PrintChar num Fin: POP BX POP AX ENDM ;IMPRIME EL CONTENIDO NUMERICO ;DE UN REGISTRO (ASCII) ;SE RESTA 30h (ASCII 0) PrintReg MACRO reg MOV DX,reg PrintNum DL ENDM ;IMPRIME VARIABLE-STRING PrintStr MACRO str PUSH AX MOV AH, 09h MOV DX, OFFSET str INT 21h POP AX ENDM ;-----------------------------; PROGRAMA PRINCIPAL ;-----------------------------MOV CX,10 ;NUMERO DE VECES QUE SE ;DESEA REPETIR EL PROGRAMA Main: CALL NewLine ;INGRESO DE NUMERO PrintStr strInNum ;MENSAJE CALL InputNum ;ESPERA MOV BH,DL ;GUARDA CALL NewLine ;INGRESO DE OPERACION

PrintStr strInOpe ;MENSAJE CALL InputChar ;ESPERA MOV BL,AL ;GUARDA CALL NewLine ;VERIFICACION DE NUMERO ;SI (NUM > 10) CALCULA SUMATORIA ;SI (NUM <= 10) MUESTRA TABLA CMP BH,10 JA Sumatoria ;################# ;### ### ;### TABLA ### ;### ### ;################# Tabla: PrintStr strTab1 PrintStr strLinea CMP BL,'+' JE Suma CMP BL,'-' JE Resta CMP BL,'.' JE Multiplicacion CMP BL,'<' JE Division JMP Main Suma: MOV SI,0 FilaSuma: PrintNum BH PrintChar '+' PrintReg SI PrintChar '=' MOV AX,SI ADD AL,BH PrintNum AL CALL NewLine INC SI CMP SI,10 JE FinTabla JMP FilaSuma Resta:

MOV AH,0 MOV AL,BH MOV SI,AX ;SI=BH MOV DI,SI ADD DI,10 ;DI=BH+10 FilaResta: PrintReg SI PrintChar '-' PrintNum BH PrintChar '=' MOV AX,SI SUB AL,BH PrintNum AL CALL NewLine INC SI CMP SI,DI JE FinTabla JMP FilaResta Multiplicacion: MOV SI,0 FilaMultiplica: PrintNum BH PrintChar '*' PrintReg SI PrintChar '=' MOV AX,SI MUL BH PrintNum AL CALL NewLine INC SI CMP SI,10 JE FinTabla JMP FilaMultiplica Division: MOV AH,0 MOV AL,BH MOV SI,AX ;SI=BH MOV MOV MUL MOV AX,SI DI,10 DI DI,AX ;DI=BH*10

FilaDivision:

PrintReg SI PrintChar '/' PrintNum BH PrintChar '=' MOV AX,SI DIV BH PrintNum AL CALL NewLine MOV AH,0 MOV AL,BH ADD SI,AX CMP SI,DI JE FinTabla JMP FilaDivision FinTabla: PrintStr strLinea JMP Main ;################# ;### ### ;### SUMATORIA ### ;### ### ;################# Sumatoria: PrintStr strSum1 MOV AL,0 SigueSumando: ADD AL,BH DEC BH CMP BH,0 JA SigueSumando FinSumatoria: PrintStr strSum2 PrintNum AL CALL NewLine JMP Main LOOP Main ;FIN DEL PROGRAMA PrintStr strFin INT 20h ;-----------------------------; PROCEDIMIENTOS ;-----------------------------;IMPRIME NUEVA LINEA NewLine PROC

MOV AH,02h ;SUB-FUNCION DE 21h ;PARA IMPRIMIR CARACTER MOV DL,13 ;CR: RETORNO DE CARRO INT 21h ;MUEVE EL CURSOR AL PRINCIPIO MOV DL,10 ;CR: SALTO DE LINEA INT 21h ;SALTA DE LINEA AL MISMO ;NIVEL VERTICAL DONDE SE ;QUEDO EL CURSOR RET NewLine ENDP ;LEE CARACTER (SE GUARDA EN AL) ;PARA LEER SIN ECHO: MOV AH,08h InputChar PROC MOV AH, 01h INT 21h RET InputChar ENDP ;####################################### ;## ## ;## LEE NUMERO (SE GUARDA EN DX) ## ;## HASTA QUE SE INGRESE ENTER (0Dh) ## ;## EL NUMERO INGRESADO (EN DECIMAL) ## ;## DEBERA SER MENOR A 256 POSITIVO ## ;## ## ;## REGISTROS UTILIZADOS: AX,BX,CX,DX ## ;## ## ;####################################### InputNum PROC PUSH AX PUSH BX PUSH CX MOV CX,0 ;CONTADOR: 1,2,3,4,... MOV BX,1 ;CONTADOR: 1,10,100,... MOV DX,0 ;ALMACENA NUMERO FINAL NuevoChar: MOV AH,01h INT 21h ;LECTURA DE CHAR

CMP AL,0Dh ;VERIFICA ENTER JE FinInputNum MOV AH,0 SUB AL,30h PUSH AX INC CX ;ASCII OFFSET 30h ;PARA NUMEROS ;SE GUARDA CHAR EN AL

JMP NuevoChar FinInputNum: SiguienteChar: ;SE SACA DE LA PILA LA ;CANTIDAD DE CARACTERES ;QUE FUERON ALMACENADOS ;EN EL REGISTRO CX POP AX MUL BL ;AX=AL*BL ADD DX,AX ;DX=DX+AX MOV MOV MUL MOV AL,BL ;AL=BL BH,10 BH ;AX=AL*10d BX,AX ;BX=AX (=BL*10)

LOOP SiguienteChar ;HASTA QUE CX=0 POP CX POP BX POP AX RET InputNum ENDP ;-----------------------------; VARIABLES ;-----------------------------strFin DB 13,10,'Programa Finalizado',13,10,'$' strInNum DB "Numero: $" strInOpe DB "Operacion: $" strTab1 DB "Impresion de Tabla...",13,10,"$" strSum1 DB "Impresion de Sumatoria...",13,10,"$" strSum2 DB "Sumatoria = $" strLinea DB "-----",13,10,"$" strAux DB 'Usted Ingreso: $'

S-ar putea să vă placă și