Hola, tengo las mismas dudas. Me tranque tratando de instalar las interrupciones ya que no entiendo bien como hacer lo del segmento y desplazamiento.
Se supone que si el identificador de la interrupción en el arreglo de interrupciones es mi dígito verificador (1 en mi caso) entonces debería usar eso y algo mas?
Ademas tengo algunas dudas respecto a mi código:
//DONDE DICE "ACA NO SE QUE PONER" ES DONDE ESTOY TRANCADO.
principal PROC
CLI ;DESHABILITO INTERRUPCIONES
;INDICO DESPLAZAMIENTO Y SEGMENTO
;SABIENDO QUE MI DIGITO VERIFICADOR ES 1 => LA POSICION EN EL ARREGLO
;DE INTERRUPCIONES ES LA 1
MOV WORD PTR ES:[ "ACA NO SE QUE PONER" ], OFFSET new_data_from_sensor
MOV WORD PTR ES:[ "ACA NO SE QUE PONER" ], CS
STI ;HABILITO INTERRUPCIONES
principal ENDP
Luego respecto al siguiente código tengo las siguientes dudas:
1) ESTA BIEN COMO SE CARGA EL CONTENIDO DE DATA_SENSOR?
2) ESTA BIEN LA FORMA QUE SE OBTIENE EL MIN Y EL MAX DE rango_sensor?
new_data_from_sensor PROC FAR
//PRESERVO EL CONTEXTO
MOV BP, SP ;BP = SP
PUSH AX;
PUSH BX;
PUSH CX;
PUSH DX;
MOV DX, DS:[DATA_SENSOR]
in(AX, DX) ;CARGO TODA LA PALABRA, AH = idSensor y AL = dato
MOV DX, VALVULAS
ADD DX, 0x0001 ;MI DIGITO VERIFICADOR
XOR BX,BX
MOV BL, AH ;PASO EL id del sensor
MOV CL, BYTE PRT DS:[BX] ;CARGO EN CL EL MINIMO DEL SENSOR EN CUESTION
MOV CH, BYTE PRT DS:[BX+1] ;CARGO EN CH EL MAXIMO DEL SENSOR EN CUESTION
cerrar:
CMP AL, CL ;COMPARO SI EL DATO ES MENOR QUE EL MINIMO
JAE abrir ;SI ES MAYOR O IGUAL
MOV AX, 0x0002 ;SE SUPONE QUE HAY QUE PONER EN 1 EL BIT DE MI DIGITO VERIFICADOR
OUT(DX, AX)
JMP fin
abrir:
CMP AL, CH ;COMPARO SI EL DATO ES MAYOR QUE EL MAXIMO
JBE fin ;SI ES MENOR O IGUAL
MOV AX, 0x0000 ;SE SUPONE QUE HAY QUE PONER EN 0 PARA ABRIR LA VALVULA
OUT(DX, AX)
JMP fin
fin:
POP DX
POP CX
POP BX
POP AX
IRET
new_data_from_sensor ENDP
Gracias! Saludos