Anda di halaman 1dari 6

PILA SEGMENT PARA STACK DB 300 DUP('MYSTACK') PILA ENDS CURSOR MACRO COLM, FILA PUSH AX PUSH BX PUSH

DX MOV AH, 15 INT 10H MOV DH, FILA MOV DL, COLM MOV AH, 2 INT 10H POP DX POP BX POP AX ENDM CLEARSCREEN PUSH PUSH PUSH PUSH MOV MOV MOV MOV INT POP POP POP POP ;;MACRO PARA POSICIONAR CURSOR ;;SALVAR REGISTROS AFECTADOS ;;OBTIENE PANTALLA ACTUAL ;;LLAMA INTERRUPCION,INICIALIZA BX ;;DESPLAZA A LA FILA INDICADA ;;DESPLAZA A LA COLUMNA INDICADA ;;INICIALIZA PARAMETRO DE CURSOR ;;LLAMA A LA INTERRUPCION ;;RESTAURA REGISTROS APILADOS ;;FIN DE LA MACRO

MACRO ;;MACRO PARA BORRAR PANTALLA AX ;;SALVAR REGISTROS AFECTADOS BX CX DX ;;FILA,COLUMNA ESQUINA SUP. IZQUIERDA ;;FILA,COLUMNA ESQUINA INF. DERECHA ;;ATRIBUTO NORMAL ;;PARAMETROS DE INTERRUPCION ;;LLAMA INTERUPCION DEL BIOS ;;RESTAURA REGISTROS APILADOS

CX, 0000H DX, 2479H BH,07 AX,0600H 10H DX CX BX AX

ENDM ;;FIN DE LA MACRO ;-----------------------------------------------------------------------PRINTCHAR MACRO TEXT ;;IMPRIME CARACTERES DEL SEG. DE DATOS PUSH AX ;;SALVAR REGISTROS AFECTADOS PUSH DX LEA DX, TEXT ;;CARGA TEXTO EN DX MOV AH, 09H ;;PARAMETRO DE INTERRUPCION INT 21H ;;INTERRUPCION DEL DOS POP DX ;;RESTAURA REGISTROS APILADOS POP AX ENDM ;;FIN DE LA MACRO ;-----------------------------------------------------------------------RETARDO MACRO TIME ;;MACRO PARA GASTAR TIEMPO LOCAL P1,P2 ;;P1 & P2 SON ROTULOS LOCALES PUSH CX MOV CX,TIME ;;PASA VARIABLE DE TIEMPO A CX P1: PUSH CX MOV CX,0FF00H ;;CARGA CX CON CUENTA 00FFH P2: LOOP P2 ;;GASTA TIEMPO DECREMENTANDO CX POP CX LOOP P1 ;;SI DX NO CERO, CARGA DE NUEVO CX POP CX ;;SI DX = 0, RESTAURA VALOR DE CX & DX ENDM ;;FIN DE LA MACRO ;------------------------------------------------------------------------

MIDATA SEGMENT PARA 'DATA' OPCIONES DB 0AH,0DH DB '----------CALCULADORA----------',0AH,0DH DB '1: SUMA',0AH,0DH DB '2: RESTA',0AH,0DH DB '3: MULTIPLICACION',0AH,0DH DB '4: DIVISION',0AH,0DH DB '5: SALIR DE LA CALCULADORA',0AH,0DH DB 'SELECCIONE UNA OPCION <1-5>...' DB '$' MENSAJE1 DB MENSAJE2 DB MENSAJE3 DB NLINE DB MENSAJES DB MENSAJER DB MENSAJEM DB MENSAJED DB X DB Y DB car DB MIDATA ENDS 0AH,0DH,"INGRESE DATO A: ",'$' 0AH,0DH,"INGRESE DATO B: ",'$' 0AH,0DH,"RESPUESTA : ",'$' 0AH,0DH,'$' " .......... SUMA........",0AH,0DH,'$' " ...........RESTA........",0AH,0DH,'$' " ..........MULTIPLICACION......",0AH,0DH,'$' " .........DIVISION........",0AH,0DH,'$' ? ? ?

MYCODE SEGMENT PARA 'CODE' MYPROC PROC FAR ASSUME CS:MYCODE, DS:MIDATA, SS:PILA PUSH DS SUB AX,AX PUSH AX MOV AX,MIDATA MOV DS,AX CALL MOPCIO MOV AH,4CH INT 21H MYPROC ENDP MOPCIO proc near CLEARSCREEN CURSOR 1,1 LEA DX, OPCIONES MOV AH, 09H INT 21H MOV AH, 01H INT 21H MOV CAR, AL CMP CAR, '1' JE SUMAR CMP CAR, '2' JE RESTAR CMP CAR, '3' JE MULTIPLICAR CMP CAR, '4' JE DIVIDIR CMP CAR, '5' JE FINAL

JMP MOPCIO SUMAR: CLEARSCREEN CALL SUM JMP MOPCIO RESTAR: CLEARSCREEN CALL REST JMP MOPCIO MULTIPLICAR: CLEARSCREEN CALL MULT JMP MOPCIO DIVIDIR: CLEARSCREEN CALL DIVIDI JMP MOPCIO FINAL:MOV AH,4CH INT 21H MOPCIO endp SUM PROC NEAR PRINTCHAR MENSAJES PRINTCHAR MENSAJE1 MOV INT MOV SUB CMP JLE SUB AH,01H 21H X,AL X, 30H X,09 SUMA_1 X,07H

SUMA_1: PRINTCHAR MENSAJE2 MOV AH,01H INT 21H SUB AL,30H CMP AL,09 JLE SUMA_2 SUB AL,07H SUMA_2: ADD AL,X ADD AL,30H CMP AL,39H JLE SUMA_3 ADD AL,07H SUMA_3:MOV AH, 09H PRINTCHAR MENSAJE3 MOV AH,0AH

;CAPTURA EN HEXADECIMAL

;TODO IMPRIME EN ASCCI

MOV CX,1 INT 10H retardo 10000 JMP MOPCIO SUM ENDP

REST PROC NEAR PRINTCHAR MENSAJER PRINTCHAR MENSAJE1 MOV INT SUB CMP JLE SUB AH,01H 21H AL, 30H AL,09 RESTA_1 AL,07H

RESTA_1: MOV X, AL PRINTCHAR MENSAJE2 MOV AH,01H INT 21H SUB AL,30H CMP AL,09 JLE RESTA_2 SUB AL,07H RESTA_2: SUB X,AL MOV AL,X ADD AL,30H CMP AL,39H JLE RESTA_3 ADD AL,07H RESTA_3:MOV AH, 09H PRINTCHAR MENSAJE3 MOV AH,0AH MOV CX,1 INT 10H retardo 10000 JMP MOPCIO REST ENDP MULT PROC NEAR PRINTCHAR MENSAJEM PRINTCHAR MENSAJE1 MOV INT SUB CMP JLE AH,01H 21H AL, 30H AL,09 MULTI_1

;CAPTURA EN HEXADECIMAL

;TODO IMPRIME EN ASCCI

SUB AL,07H MULTI_1: MOV X, AL PRINTCHAR MENSAJE2 MOV AH,01H INT 21H SUB AL,30H CMP AL,09H JLE MULTI_2 SUB AL,07H MULTI_2: MUL X ADD AL,30H CMP AL,39H JLE MULTI_3 ADD AL,07H MULTI_3:MOV AH, 09H PRINTCHAR MENSAJE3 MOV AH,0AH MOV CX,1 INT 10H retardo 10000 JMP MOPCIO MULT ENDP DIVIDI PROC NEAR PRINTCHAR MENSAJED PRINTCHAR MENSAJE1 MOV INT SUB CMP JLE SUB AH,01H 21H AL, 30H AL,09 DIV_1 AL,07H ; DIVIDENDO

;CAPTURA EN HEXADECIMAL

;TODO IMPRIME EN ASCCI

DIV_1: MOV X, AL PRINTCHAR MENSAJE2 MOV AH,01H INT 21H MOV AH,0FH SUB AL,30H CMP AL,09H JLE DIV_2 SUB AL,07H DIV_2: MOV MOV MOV DIV ADD CMP JLE ADD Y,AL AH,00H AL,X Y AL,30H AL,39H DIV_3 AL,07H

;DIVISOR

DIV_3: MOV AH, 09H PRINTCHAR MENSAJE3 MOV AH,0AH MOV CX,1 INT 10H RETARDO 10000 JMP MOPCIO DIVIDI ENDP MYCODE ENDS END

;TODO IMPRIME EN ASCCI

Anda mungkin juga menyukai