/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
DOS interrups?
Fra : Aslak Ransby


Dato : 23-04-01 13:31

Hej NG
Jeg er i gang med at programmere musen under MS-DOS og til det kalder
jeg nogle interrupts og læser nogle registre. Denne metode fungerer
fint problemet er bare at jeg ikke ved precist hvad et interrupt og et
register er. Derfor har jeg været på net.jagt efter noget
dokumentation der kan forklare dette, men indtil vidre har jeg ikke
fundt noget brugbart.
Så hvis der evt. er en af jer der kan komme med en forklaring (eller
et link) på subj. vil det redde min dag(jeg er lidt træt at lege med
sort magi)

Best Regards / Venlig Hilsen
------------------------------------------
Aslak Ransby

 
 
Bertel Lund Hansen (23-04-2001)
Kommentar
Fra : Bertel Lund Hansen


Dato : 23-04-01 14:14

Aslak Ransby skrev:

>Jeg er i gang med at programmere musen under MS-DOS og til det kalder
>jeg nogle interrupts og læser nogle registre. Denne metode fungerer
>fint problemet er bare at jeg ikke ved precist hvad et interrupt og et
>register er.

Et register er et lager til mellemregninger. En CPU skal
programmeres helt ned i de allermindste detaljer, og
regneregistret (ALU'en) kan kun rumme ét tal ad gangen. Hvis to
tal skal adderes, må ét af dem altså gemmes i et register
undervejs.

Man kunne godt gemme det i hukommelsen i stedet for, men det
tager længere tid.

Den første processor i 808xx-familien, 8080'eren, havde 4
registre:
   ALU
   B C
   D E
B kunne benyttes som et 8-bits register, men man kunne også bruge
BC som et 16-bitsregister. En moderne CPU har mange flere og kan
håndtere flere bits ad gangen, men princippet er det samme.


"Interrupt" betyder "afbrydelse". Man kunne godt sætte CPU'en til
i hver arbejdsgang på få millisekunder at checke diskette,
harddisk1, harddisk2, keyboard, printer, cd-drev, dvd-drev,
lydkort, modem, netkort, grafikkort, scanner og mus - men det er
ikke smart. Al tiden ville gå med dette check, og den ville være
ufatteligt sløv.

Derfor laver man et ben på CPU'en, og lader den passe det program
den er ved at afvikle. Hvis man så f.eks. trykker på en tast, går
der signal til dette ben, CPU'en afbrydes, checker og servicerer
det apparat der forårsagede interruptet (og ikke andre) og vender
tilbage til programmet. Det kaldes interruptstyring. De andre
apparater kan på samme måde aktivere et interrupt.

Der ligger i DOS en hoben nytterutiner som man kan kalde via et
interrupt (og jeg har aldrig rigtig fattet hvorfor det skal
foregå med et interrupt, men det skal det altså), og det er dem
du åbenbart er begyndt at arbejde med.

Eksempel:

Fra Ralf Browns interruptliste:
INT 10 - VIDEO - SET CURSOR POSITION
   AH = 02h
   BH = page number
    0-3 in modes 2&3
    0-7 in modes 0&1
    0 in graphics modes
   DH = row (00h is top)
   DL = column (00h is left)

AH betyder A-High. Det er de øverste 8 bits i regneregistret A.
Tilsvarende med BH. Når man aktiverer interrupt $10, kan man med
AH og BH bestemme hvilken funktion det skal udløse, og man kan
sætte nogle parametre.

Her er en procedure i maskinkode som kalder dette interrupt. Det
er pakket ind i en Pascal-skal (TP). Med den kan man fastlægge
cursorens position på en tekstskærm:

Procedure goto_xy (x,y: Byte); Assembler;
Asm
MOV AH,2
MOV BH,0
MOV DL,x
MOV DH,y
INT $10
End;

Hvis du vil have en lang liste over stort set alle interrupts i
DOS, så søg på Ralf Brown. Hvis du ikke kan finde den, kan jeg
sende dig pakken.

Jeg ved ikke hvor der ligger noget om CPU'er og registre, men
Tanebaums bøger beskriver det, og meget meget mere.

--
Bertel

Kan man fjerne PowerArchiver fra new-menuen permanent?

Aslak Ransby (23-04-2001)
Kommentar
Fra : Aslak Ransby


Dato : 23-04-01 23:16

On Mon, 23 Apr 2001 15:14:11 +0200, Bertel Lund Hansen
<nospamto@lundhansen.dk> wrote:

Tak for din forklaring nu er jeg blevet det klogere.

>Hvis du vil have en lang liste over stort set alle interrupts i
>DOS, så søg på Ralf Brown. Hvis du ikke kan finde den, kan jeg
>sende dig pakken.

Jeg har fundet den ellers tak for tilbudet :)

Best Regards / Venlig Hilsen
Aslak Ransby

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste