Hi, i am an english student studying in mexico. Our teacher gave us a program in Assembly Language to make corrections, compile and explain. I made the necessary corrections and, I tried compiling the program but i received an error "
C:\WINDOWS\system32\cmd.exe-examen21
The NTVDM CPU has encountered an illegal instruction.
CS:0000 IP:415d OP:ff ff ff ff ff Choose 'Close' to terminate the applicacion."
Can you please help me with what might be this error i am encountering.
THE CODE IS INCLUDED BELOW.
CODE
TITLE P21MOUSE (EXE) USE OF THE MOUSE
.MODEL SMALL
.STACK 64
.DATA
XBINARY DW 0;COORDINATE X BINARY
YBINARY DW 0;COORDINATE Y BINARY
ASCVAL DW ?;VARIABLE ASCII
;-------variables
DISPDATA LABEL BYTE
XMSG DB 'X = ';MESSAGE X
XASCII DW ?;ASCII VALUE OF X
DB ' '
YMSG DB 'Y = ';MESSAGE Y
YASCII DW ?;ASCII VALUE OF Y
.CODE
BEGIN PROC FAR
MOV AX,@data;START
MOV DS,AX ;EL REGISTRO DS
CALL Q10CLEAR;CLEAR SCREEN
CALL B10INIT ;INICIALIZA EL RATON
CMP AX,00 ;¿RATON INSTALADO?
JE A90 ;NO,EXIT
A10:
CALL D10PTR ;OBTENER APUNTADOR DEL RATON
CMP BX,01 ;¿BOTON PRESIONADO?
JE A80 ;SI, SALIR
CALL Q20CURS ;COLOCAR EL CURSOR
MOV AX,XBINARY;
CALL G10CONV ;X TO ASCII
MOV AX,ASCVAL;
MOV XASCII,AX;
MOV AX,YBINARY;
CALL G10CONV ;Y TO ASCII
MOV AX,ASCVAL;
CALL Q30DISP ;DISPLAY VALUES OF X & Y
JMP A10 ;REPETIR
A80:
CALL H10HIDE ;HIDE MOUSE POINTER
A90:
CALL Q10CLEAR;CLEAR SCREEN
MOV AX,4C00H;EXIT TO DOS
INT 21H
BEGIN ENDP
B10INIT PROC NEAR
MOV AX,00H ;INICIALIZAR EL RATON
INT 33H
CMP AX,00 ;¿RATON INSTALADO?
JE B90 ;NO,SALIR
MOV AX,01H ;MOSTRAR APUNTADOR
B90:
RET ;REGRESAR A DONDE FUE LLAMADO
B10INIT ENDP
.286
D10PTR PROC NEAR
D20: MOV AX,03H ;OBTENER POSICION DE APUNTADOR
INT 33H
CMP BX,01 ;¿BOTON DERECHO PRESIONADO?
JE D90 ;SI,SIGNIFICA SALIR
SHR CX,03 ;DIVIDIR EL NUMERO DE PIXEL
SHR DX,03 ;ENTRE 8
CMP CX,XBINARY;¿HA CAMBIADO LA POSICION
JNE D30 ;DEL APUNTADOR?
CMP DX,YBINARY;
JE D20 ;NO, REPETIR LA OPERACION
D30:
;SI
MOV XBINARY, CX;GUARDAR LA NUEVA POSICION
MOV YBINARY, DX;
D90:
RET ;REGRESAR A DONDE FUE LLAMADO
D10PTR ENDP
G10CONV PROC NEAR ;AX = X O Y BINARIO
MOV ASCVAL,2020H;LIMPIA EL CAMPO ASCII
MOV CX,10 ;FIJA EL FACTOR DE DIVISION
LEA SI,ASCVAL+1;CARGA LA DIRECCION ASCVAL
CMP AX,CX ;COMPARA LA POSICION CON 10
JB G30 ;MENOR, PASAR
DIV CL ;MAYOR, DIVIDIR ENTRE 10
OR AH,30H ;INSERTAR 3 ASCII
MOV [SI],AH ;ALMACENAR EN EL BYTE DE LA DERECHA
DEC SI ;DISMINUIR DIRECCION DE ASCVAL
G30:
OR AL,30H ;INSERTAR 3 ASCII
MOV [SI],AL ;ALMACENAR EN EL BYTE MAS A LA IZQUIERDA
RET ;REGRESAR A DONDE FUE LLAMADO
G10CONV ENDP
H10HIDE PROC NEAR
MOV AX,02H ;OCULTAR APUNTADOR
INT 33H
RET ;REGRESAR A DONDE FUE LAMADO
H10HIDE ENDP
Q10CLEAR PROC NEAR
MOV AX,0600H;PETICION PARA LIMPIAR LA PANTALLA
MOV BH,30H ;COLORES
MOV CX,00 ;PANTALLA
MOV DX,184FH;COMPLETA
INT 10H
RET ;REGRESAR A DODNE FUE LLAMADO
Q10CLEAR ENDP
Q20CURS PROC NEAR
MOV AH,02H ;COLOCAR CURSOR
MOV BH,00 ;PAGINA 0
MOV DH,0 ;RENGLON
MOV DL,25 ;COLUMNA
INT 10H
RET ;REGRESAR A DONDE FUE LLAMADO
Q20CURS ENDP
Q30DISP PROC NEAR
MOV AX,40H ;PETICION PARA DESPLEGAR
MOV BX,01 ;PANTALLA
MOV CX,14 ;NUMERO DE CARACTERES
LEA DX,DISPDATA;AREA DE DESPLIEGUE
INT 21H
RET ;REGRESAR A DONDE FUE LLAMADO
Q30DISP ENDP
END BEGIN