PDA

View Full Version : [Assembly&IA-32.]passaggio parametri interrupt


rschirin
12-05-2010, 01:14
anche se la mia non č proprio una domanda di programmazione, ma non ho trovato sezione migliore: chi mi sa dire qualcosa di pių sul passaggio di parametri durante gli interrupt?

gugoXX
12-05-2010, 08:31
Ogni interrupt software richiede che i parametri in ingresso siano messi in opportuni registri.
Ogni interrupt puo' quindi richiedere che siano valorizzati i propri registri, prima di essere richiamato. In modo praticamente casuale.
AH oppure AX sono i registri utilizzati tipicamente come selettori della funzione. Ma non e' sempre cosi'. Per il resto e' anarchia.

MaxArt
12-05-2010, 09:09
Ogni interrupt puo' quindi richiedere che siano valorizzati i propri registri, prima di essere richiamato.Forse "richiedere" non č la parola pių adatta: sarebbe meglio dire che l'interrupt suppone che in determinati registri ci siano i dati che gli servono.

gugoXX
12-05-2010, 09:47
Gia'.

rschirin
12-05-2010, 11:27
Forse "richiedere" non č la parola pių adatta: sarebbe meglio dire che l'interrupt suppone che in determinati registri ci siano i dati che gli servono.


per "dati che gli servono" intendiamo:
- indice della routine a cui fare riferimento
- code segment e instruction point
- eventuali stack pointer per sapere dove ritornare al termine della routine?

MaxArt
12-05-2010, 11:35
per "dati che gli servono" intendiamo:
- indice della routine a cui fare riferimento
- code segment e instruction point
- eventuali stack pointer per sapere dove ritornare al termine della routine?No, il puntatore per tornare dall'interrupt viene messo automaticamente nello stack. Del CS:IP non se ne fa nulla un interrupt, indicherebbe l'istruzione corrente.
I dati che gli servono possono essere i pių svariati, dai singoli valori interi (in AX, BX, e cosė via) ai puntatori tipo ES:BP o DS:SI e via dicendo.
Le informazioni di ritorno vengono messe a loro volta nei registri.

Ad esempio, se vuoi sapere l'ora di sistema chiami l'interrupt 33 (0x21) impostando AH=0x2C e al ritorno avrai in CH le ore, in CL i minuti, in DH i secondi e in DL i centesimi di secondo (quindi fa' attenzione che se avevi informazioni importanti in CX e DX č meglio metterli nello stack).

rschirin
12-05-2010, 15:09
grazie