Hitno mi treba pomoc oko razumevanja programa iz Asemblera za x86,Text zadatka je:
Na port FF00h vezan je 16-bitni registar vremenskog brojača (timer), na način da se upisom vrednosti u ovaj registar automatski startuje brojač. Kada dobroji do nule, brojač se zaustavlja i istovremeno generiše prekid procesoru. Oscilator vremenskog brojača ima frekvenciju 0.5kHz. Na port FF02h vezan je 16-bitni registar podataka D/A konvertora. Upisom vrednosti na ovaj port automatski se startuje konverzija. Na port FF04h vezan je 16-bitni prijemni registar kontrolera serijske veze. Kontroler serijske veze, po prijemu podatka u prijemni registar, generiše prekid procesoru. Podaci stižu neprekidno u nepravilnim vremenskim razmacima. Napisati glavni program i potrebne prekidne rutine, na simboličkom mašinskom jeziku procesora i8086, koje obavljaju sledeću operaciju: po prihvatanju 17 podataka sa kontrolera ser. veze potrebno je na D/A konvertor poslati njihov zbir. Ako je u roku od 2 sekunde (od poslednjeg poslatog podatka) pristiglo manje od 17 podataka tada na D/A konvertor treba poslati dvostruku vrednost njihovog zbira. Ako u navedenom vremenskom intervalu nije stigao ni jedan podatak, na D/A konvertor treba poslati 0. Potrebno je inicijalizovati interapt vektore (brojeve ulaza izaberite sami).
Program izgleda ovako:
prekidi SEGMENT
ASSUME CS:prekidi
int_tm: MOV DX, 0FF02H ;D/A.DR
MOV AX, BX
SHL AX, 1
OUT DX, AX
XOR BX, BX
XOR CX, CX
MOV DX, 0FF00H ;Tajmer.DR
MOV AX, 1000 ;2sek
OUT DX, AX
IRET
int_sr: MOV DX, 0FF04H ;Ser.DR
IN AX, DX
ADD BX, AX
INC CX
CMP CX, 17
JNE kraj
MOV DX, 0FF02H ;D/A.DR
MOV AX, BX
OUT DX, AX
XOR BX, BX
XOR CX, CX
MOV DX, 0FF00H ;Tajmer.DR
MOV AX, 1000 ;2sek
OUT DX, AX
kraj: IRET
prekidi ENDS
program SEGMENT
ASSUME CS:program
ent_tm EQU 34H
ent_sr EQU 35H
poc: CLI
XOR AX, AX
MOV DS, AX
MOV CX, prekidi
MOV AX, OFFSET int_tm
MOV DX, OFFSET int_sr
MOV BX, ent_tm*4
MOV [BX], AX
MOV [BX+2], CX
MOV BX, ent_sr*4
MOV [BX], DX
MOV [BX+2], CX
XOR BX, BX ;suma
XOR CX, CX ;brojac
MOV DX, 0FF00H ;Tajmer.DR
MOV AX, 1000 ;2sek
OUT DX, AX
STI
petlja: JMP petlja
program ENDS
END poc
Ako moze pomoc "korak po korak" sta znaci koja naredba,ukratko,ne mora detaljno jer poznajem donekle sintaksu asemblera.
Ljudi pomagajte...!
Na port FF00h vezan je 16-bitni registar vremenskog brojača (timer), na način da se upisom vrednosti u ovaj registar automatski startuje brojač. Kada dobroji do nule, brojač se zaustavlja i istovremeno generiše prekid procesoru. Oscilator vremenskog brojača ima frekvenciju 0.5kHz. Na port FF02h vezan je 16-bitni registar podataka D/A konvertora. Upisom vrednosti na ovaj port automatski se startuje konverzija. Na port FF04h vezan je 16-bitni prijemni registar kontrolera serijske veze. Kontroler serijske veze, po prijemu podatka u prijemni registar, generiše prekid procesoru. Podaci stižu neprekidno u nepravilnim vremenskim razmacima. Napisati glavni program i potrebne prekidne rutine, na simboličkom mašinskom jeziku procesora i8086, koje obavljaju sledeću operaciju: po prihvatanju 17 podataka sa kontrolera ser. veze potrebno je na D/A konvertor poslati njihov zbir. Ako je u roku od 2 sekunde (od poslednjeg poslatog podatka) pristiglo manje od 17 podataka tada na D/A konvertor treba poslati dvostruku vrednost njihovog zbira. Ako u navedenom vremenskom intervalu nije stigao ni jedan podatak, na D/A konvertor treba poslati 0. Potrebno je inicijalizovati interapt vektore (brojeve ulaza izaberite sami).
Program izgleda ovako:
prekidi SEGMENT
ASSUME CS:prekidi
int_tm: MOV DX, 0FF02H ;D/A.DR
MOV AX, BX
SHL AX, 1
OUT DX, AX
XOR BX, BX
XOR CX, CX
MOV DX, 0FF00H ;Tajmer.DR
MOV AX, 1000 ;2sek
OUT DX, AX
IRET
int_sr: MOV DX, 0FF04H ;Ser.DR
IN AX, DX
ADD BX, AX
INC CX
CMP CX, 17
JNE kraj
MOV DX, 0FF02H ;D/A.DR
MOV AX, BX
OUT DX, AX
XOR BX, BX
XOR CX, CX
MOV DX, 0FF00H ;Tajmer.DR
MOV AX, 1000 ;2sek
OUT DX, AX
kraj: IRET
prekidi ENDS
program SEGMENT
ASSUME CS:program
ent_tm EQU 34H
ent_sr EQU 35H
poc: CLI
XOR AX, AX
MOV DS, AX
MOV CX, prekidi
MOV AX, OFFSET int_tm
MOV DX, OFFSET int_sr
MOV BX, ent_tm*4
MOV [BX], AX
MOV [BX+2], CX
MOV BX, ent_sr*4
MOV [BX], DX
MOV [BX+2], CX
XOR BX, BX ;suma
XOR CX, CX ;brojac
MOV DX, 0FF00H ;Tajmer.DR
MOV AX, 1000 ;2sek
OUT DX, AX
STI
petlja: JMP petlja
program ENDS
END poc
Ako moze pomoc "korak po korak" sta znaci koja naredba,ukratko,ne mora detaljno jer poznajem donekle sintaksu asemblera.
Ljudi pomagajte...!