-
15.04.10 20:55 #1
- Registriert seit
- Mar 2010
- Ort
- Neuburg a. D.(Bayern)
- Beiträge
- 99
Hallo,
Ich programmier seit kurzem Assembler (oder versuche es!).
ich will ein kleine System schreiben und bin auf ein Problem gestoßen, bei dem mir niemand (Internet, Bücher, Programmierer) helfen konnte:
1. Wie funktioniert das mit den Interrupts?
Ich weiß, dass es eine Interruptschnittstelle im Prozessor gibt, auf die dieser reagiert.
Was macht jetzt der Computer? (springt er etwa an eine bestimmte Stelle?)
2.Kann mir jeman ein konkretes Beispiel über eine Bildschirmausgabe geben?
Vielen Dank im vorraus
Cpp-FreakFrüherer Name: Cpp-Freak
Bildung ist, was übrig bleibt, wenn man alles vergessen hat, was man in der Schule gelernt hat
-Albert Eistein
Wirklich, ich habe nicht vor Microsoft zu zerstören. Das wird nur ein ziemlich unbeachteter Nebeneffekt sein
-Linus Torvalds
Die meisten Computerpobleme sitzen zwischen Tastatur und Stuhl
Google ist dein Freund
-
Auf Wikipedia ist eigentlich alles Wissenswerte zu Interrupts schön zusammengefasst.
Im Betriebssystem-Tutorial ist beschrieben, wie man eine Textausgabe umsetzt.
Grüße,
Matthias„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
-
16.04.10 15:22 #3
- Registriert seit
- Mar 2010
- Ort
- Neuburg a. D.(Bayern)
- Beiträge
- 99
Hallo,
danke für die schnelle Antwort.
das mit den Interrupts verstehe ich trotzdem noch nicht.
schaut denn der Prozessor selbstständig
in der Boottabelle nach?
Cpp-FreakGeändert von Clund (16.04.10 um 15:23 Uhr) Grund: "?" vergessen
Früherer Name: Cpp-Freak
Bildung ist, was übrig bleibt, wenn man alles vergessen hat, was man in der Schule gelernt hat
-Albert Eistein
Wirklich, ich habe nicht vor Microsoft zu zerstören. Das wird nur ein ziemlich unbeachteter Nebeneffekt sein
-Linus Torvalds
Die meisten Computerpobleme sitzen zwischen Tastatur und Stuhl
Google ist dein Freund
-
19.05.10 19:19 #4
- Registriert seit
- Mar 2010
- Ort
- Neuburg a. D.(Bayern)
- Beiträge
- 99
Hallo,
Kann man Bildschirmausgaben auch ohne Softwareinterrupts ausführen?
Also direkt den Port ansprechen.
Cpp-FrekFrüherer Name: Cpp-Freak
Bildung ist, was übrig bleibt, wenn man alles vergessen hat, was man in der Schule gelernt hat
-Albert Eistein
Wirklich, ich habe nicht vor Microsoft zu zerstören. Das wird nur ein ziemlich unbeachteter Nebeneffekt sein
-Linus Torvalds
Die meisten Computerpobleme sitzen zwischen Tastatur und Stuhl
Google ist dein Freund
-
Sorry für die diesmal späte Antwort, ich hab es wohl einfach übersehen.
Was meinst du mit der „Boottabelle“? Meinst du vielleicht den Interruptvektor?
Ja. Im Real Mode kannst du z.B. direkt in das Segment 0xB800 schreiben, auf welches (normalerweise) der Grafikkartenspeicher für den Textmodus gemappt ist.
Grüße,
Matthias„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
-
19.05.10 20:09 #6
- Registriert seit
- Mar 2010
- Ort
- Neuburg a. D.(Bayern)
- Beiträge
- 99
Hallo,
danke erstmal für die schnelle Antwort.
Mit welchem Befehl denn? Etwa mit 'OUT'?Ja. Im Real Mode kannst du z.B. direkt in das Segment 0xB800 schreiben, auf welches (normalerweise) der Grafikkartenspeicher für den Textmodus gemappt ist.
Mit Boottabelle meine ich die Funktionen die (wohl schon) vom BIOS definirt wurden.Was meinst du mit der „Boottabelle“? Meinst du vielleicht den Interruptvektor?
Cpp-FreakFrüherer Name: Cpp-Freak
Bildung ist, was übrig bleibt, wenn man alles vergessen hat, was man in der Schule gelernt hat
-Albert Eistein
Wirklich, ich habe nicht vor Microsoft zu zerstören. Das wird nur ein ziemlich unbeachteter Nebeneffekt sein
-Linus Torvalds
Die meisten Computerpobleme sitzen zwischen Tastatur und Stuhl
Google ist dein Freund
-
Nein. Mit OUT schreibt man doch in kein Speichersegment. Verwende z.B. STOSB oder MOVB.
Die Funktionen des BIOS kann man (im Real Mode) über Software-Interrupts (INT-Instruktion) aufrufen. Der Prozessor schaut bei der Ausführung dieser Instruktion in der Interruptvektortabelle nach, wo im Speicher die Behandlungsroutine für diese Unterbrechung steht und setzt die Ausführung dort fort.
Grüße,
Matthias„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
-
20.05.10 20:22 #8
- Registriert seit
- Mar 2010
- Ort
- Neuburg a. D.(Bayern)
- Beiträge
- 99
Hallo,
und wie verwendet man MOVB bzw. STOSB ?
Tut mir leid das ich das jetzt frage, aber von dem Befehl hab ich noch nicht gehört.
Cpp-FreakFrüherer Name: Cpp-Freak
Bildung ist, was übrig bleibt, wenn man alles vergessen hat, was man in der Schule gelernt hat
-Albert Eistein
Wirklich, ich habe nicht vor Microsoft zu zerstören. Das wird nur ein ziemlich unbeachteter Nebeneffekt sein
-Linus Torvalds
Die meisten Computerpobleme sitzen zwischen Tastatur und Stuhl
Google ist dein Freund
-
„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
-
21.05.10 13:31 #10
- Registriert seit
- Mar 2010
- Ort
- Neuburg a. D.(Bayern)
- Beiträge
- 99
Hallo,
Ich programmier eigentlich nur Intel.MOVB ist AT&T-Syntax, in Intel-Syntax ist das einfach nur ein MOV
Aber was hat verschieben von Daten mit Bildschirmausgaben zu tun?
Greift etwa die Graphikkarte auf 0xB800 zu, um die Ausgabe zu machen?
Cpp-FreakFrüherer Name: Cpp-Freak
Bildung ist, was übrig bleibt, wenn man alles vergessen hat, was man in der Schule gelernt hat
-Albert Eistein
Wirklich, ich habe nicht vor Microsoft zu zerstören. Das wird nur ein ziemlich unbeachteter Nebeneffekt sein
-Linus Torvalds
Die meisten Computerpobleme sitzen zwischen Tastatur und Stuhl
Google ist dein Freund
-
Ja, so in der Art. Siehe http://en.wikipedia.org/wiki/VGA_com...Access_methods
Grüße,
Matthias„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
-
Ich kann dir jetzt zwar nicht spezifisch auf einen Intel-prozessor bezogen helfen, aber ich hab Assembler anhand des MSP430 von Texas Instruments erlernt. Das ist zwar ein Microcontroller und daher sind da schon einige Unterschiede aber die Grundstrukturen sind die gleichen.
Zu den Interrupts, da bist du dir ja nicht ganz sicher: und zwar gibt es eine Interruptvektortabelle, wo für jeden Port ein bzw. zwei Speicherbereiche reserviert sind. In diese Speicherbereiche schreibt man dann die Adresse der Funktion(auch Interrupt Service Routine -ISR - gennant) die aufgerufen werden soll. Wird ein Interrupt ausgelöst guckt der Prozessor in die Interruptvektortable wo die ISR ist und springt dahin. Nach erfolgreicher ausführung der ISR springt er an die Adresse zurück wo er war bevor er unterbrochen wurde. Das ist jetzt nur eine allgemeine Darstellung, zusätzlich gibt es noch so Faktoren wie Interrupt-Priorität, das z. B. ein Port eine höhere Interrupt-Priorität hat als der andere. Das würde bedeuten, wenn der Prozessor in einer ISR mit niedriger Prioriät ist kann diese durch einen Interrupt von höherer Prioriät unterbrochen werden, andersrum wäre es aber nicht so, da würde die ISR erst nach der anderen ausgeführt werden.
Wie gesagt, dass ist jetzt das Prinzip wie es auf einem Mikrocontroller läuft, ich vermute dass es auf einem Mikroprozessor ein bisschen anders funktioniert, auf einem MC muss ich meinen gesamten Speicher(Interruptvektortabelle, Stack Pointer, etc) komplett selber pflegen, ich denke mal dass es auf einem MP dynamschier sein wird.
-
23.11.10 22:56 #13
- Registriert seit
- Mar 2010
- Ort
- Neuburg a. D.(Bayern)
- Beiträge
- 99
Ich hab jetzt doch noch mal ne Frage:
wie kann man bei 32 bit Prozessoren diese Tabelle Manipulieren?
Cpp-FreakFrüherer Name: Cpp-Freak
Bildung ist, was übrig bleibt, wenn man alles vergessen hat, was man in der Schule gelernt hat
-Albert Eistein
Wirklich, ich habe nicht vor Microsoft zu zerstören. Das wird nur ein ziemlich unbeachteter Nebeneffekt sein
-Linus Torvalds
Die meisten Computerpobleme sitzen zwischen Tastatur und Stuhl
Google ist dein Freund
-
31.12.10 14:16 #14BassBox Tutorials.de Gastzugang
Also, die interrupt vektortabelle kann nur im realmode angesprochen werden (in dem modus in dem du nach dem booten bist also 16bit code der auf einem 32 oder 64 bit prozessor ausgeführt wird) Im pmode kannst du keine ints ansprechen aber in VM86 wieder. mal angenommen du willst interrupt 21h definieren dann machst du folgendes:
Code :1 2 3 4 5 6 7 8 9
mov ax,0 mov es,ax ;setze das extrasegment auf 0 cli ;schalte interrupts zur sicherheit aus mov word [es:4*21h],int_21h ;schiebe die offset adresse der funktion int_21h in die vektor tabelle mov word [es:4*21h+2],cs ;schiebe das codesegment in die vektor tabelle mov ax,09000h mov ss,ax ;setzte Stack mov sp,100 ;setzte Stack sti ;schalte interrupt rotine wieder ein
So wenn du jetzt int 21h aufrufst dann führt der pc die von dir programmierte funktion int_21h aus.
du kannst auch andere ints setzten indem du einfach das 21h in den eckigen klammern durch die hexadezimale intnummer ersetzt zb. 60h.
mov word [es:4*int nummer],funktion die beim aufrufen des ints ausgeführt werden soll
mov word [es:4*int nummer+2],cs
das ist das prinzip.Geändert von BassBox (31.12.10 um 14:26 Uhr)
-
27.03.11 09:47 #15
- Registriert seit
- Mar 2010
- Ort
- Neuburg a. D.(Bayern)
- Beiträge
- 99
Hallo,
vielen Dank nochmal für eure Hilfe!
am Ende hab ich meinen Kernel doch zu was gebracht (siehe Augsburger Allgemeine)
Jetzt stehe ich vor neuen Problemen:
1. Ich brauch einen Diskettentreiber
Da mein Programm immer größer und größer wird, reicht der Platz im Bootsektor nicht mehr aus. Also würd ich gerne Variablen, die sehr lange sind, von der Diskette laden.
2. Überlege ich mir, ob ich den Kernel in C++ weiterprogrammiere, da ich komplizierte Befehle zum steuern des Kernels verwenden werde. (irgendjemand hat das hier schon mal hingekriegt) Würde mir das jemand raten, oder soll ich eher bei Assembler bleiben?
3. Ich habe irgendwie keinen Stack
ich verwende zwar Interrrupts und call-Aufrufe, habe aber keinen Stack definiert.
Kann mir mal jemand sagen, wie ich das mache?
Grüße,
Cpp-FreakGeändert von Clund (27.03.11 um 09:58 Uhr) Grund: 3. vergessen
Früherer Name: Cpp-Freak
Bildung ist, was übrig bleibt, wenn man alles vergessen hat, was man in der Schule gelernt hat
-Albert Eistein
Wirklich, ich habe nicht vor Microsoft zu zerstören. Das wird nur ein ziemlich unbeachteter Nebeneffekt sein
-Linus Torvalds
Die meisten Computerpobleme sitzen zwischen Tastatur und Stuhl
Google ist dein Freund
Ähnliche Themen
-
mit assembler Computer ausschalten
Von simicoder im Forum Sonstige SprachenAntworten: 6Letzter Beitrag: 29.09.10, 12:29 -
Assembler Tutorial gesucht
Von Maxsoft im Forum Sonstige SprachenAntworten: 1Letzter Beitrag: 22.06.07, 21:53 -
Assembler-Beispiel für Multitasking gesucht
Von Tanor im Forum Sonstige SprachenAntworten: 0Letzter Beitrag: 12.07.05, 11:38 -
Grundlagen-Tuts für Adobe Premiere Pro 1.5 gesucht
Von x_y_z im Forum Videoschnitt, Videotechnik & -produktionAntworten: 3Letzter Beitrag: 10.05.05, 17:52 -
Guten Assembler gesucht!
Von pamax im Forum Sonstige SprachenAntworten: 4Letzter Beitrag: 20.02.05, 18:15



6Danke

Zitieren


rausfinden. Oder du besorgst dir ein gutes Buch zur Assembler-Programmierung. Wie man Werte im Speicher kopiert gehört nun wirklich zu den Grundlagen…
Login





