Assembler... INT 21H geht nicht?

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
Max_der_Held
Beiträge: 595
Registriert: 18.04.2006 17:01
Wohnort: Bavaria
Kontaktdaten:

Assembler... INT 21H geht nicht?

Beitrag von Max_der_Held »

Hallo..
ich bin wirklich kein Assembler-freak.. wollte aber doch mal in das Gebiet hineinhorchen.
Am Anfang lernt man bei meinem genialen Buch von diversen interrrupts etc..

kurz: folgendes löst bei mir beim int 21h invalid memory access aus:

(obacht, inline asm anschalten)

Code: Alles auswählen

MOV ah, 08h
INT 21h
MOV DL,AL   ; zeichen einlesen nach AL und gleich in DL verschieben
MOV ah, 02h
INT 21h       ; Zeichen von DL anzeigen. (wenn ich mich nicht irre)
end
woran liegt das? im disassembler kann ich zwar den code und alles lesen.. (z.b. muss ich somit ja nicht mehr .model small angeben etc..)
aber verstehen ist ne andre sache..

hilfe?^^

-mfg ;)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ermn... da bist du wohl ein paar Jahre zu spät dran.
die Interrupts waren eine DOS-Geschichte.

ich hab selber noch textausgabe im Textmodus und Grafik-Ansteuerung im Mode13 über die Interrupts programmiert...

> muss ich somit ja nicht mehr .model small angeben etc..

ja das buch scheint wirklich etwas älter zu sein, nicht?
so um die 15 Jährchen?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Moskito
Beiträge: 182
Registriert: 18.01.2006 23:01
Kontaktdaten:

Beitrag von Moskito »

Da könnt ich auch was beisteuern;
(Hab ich mir von Danilo abgeschaut und an meine Bedürfnisse angepasst)
Vorausgesetzt wird ein mit openscreen geöffneter Bildschirm nebst Beiwerk.
Die Routine GetScanLine gibt nun die aktuelle Rasterzeile zurück.
(fast wie zu Amiga-Zeiten, herrlich)



scanline=0

getscanline:
!extrn _PB_DDrawBase
!MOV Eax,[_PB_DDrawBase]
!PUSH v_scanline
!PUSH Eax
!MOV Eax,[Eax]
!CALL dword [Eax+64]
Return


bis denne

Thomas
Benutzeravatar
Max_der_Held
Beiträge: 595
Registriert: 18.04.2006 17:01
Wohnort: Bavaria
Kontaktdaten:

Beitrag von Max_der_Held »

@Kaeru
ohh. und ich hab mich schon gefreut, endlich so richtig in assembler einzusteigen ^^.
Naja.. im buch redet er noch von 80386 prozessoren und dem neuen Pentium (nix 2, III oder vier) ^^.
Ahm.. Wo kriegt man denn derzeit ein aktuelles (gutes?^^) buch/Referenz über assembler her?.. ^^
[es sollte ja eigentlich so ne Art Schwerpunkt-> Standalone programme programmieren haben.. sprich programme ohne OS.. eins meiner Ziele ;) )

@Moskito
Xd sauber hehe :D
ist mir zwar schon fast zu hoch, aber sieht gut aus ^^ ;)

(Anmerkung: zu Amigazeiten war ich noch nichtmal auf der WELT! o_O ^^ XD ;) )

ps: kann ich die INT-befehle jetzt noch hernehmen, oder ist dass irgendwie veraltet, oder so..?
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

INT 21H ist sozusagen die "WinAPI des DOS" :mrgreen:

Anstatt z.B. sowas wie TimeGetTime_() aufzurufen, tut man eben eine bestimmte Nummer in ein bestimmtes Register, plus die Parameter, und ruft dann INT 21H auf, um damit eine bestimmte Funktion auszulösen (z.B. Dateien öffnen, Text ausgeben, etc).

Wenn Du was standalone machen willst, also komplett ohne OS, dann kannst Du logischerweise keine DOS-Funktionen aufrufen, sondern mußt Dir alles selber machen. Was natürlich etwas umständlich ist ;)
Du kannst Dir aber für den Anfang ja auch eine etwas einfachere Maschine suchen. Ich hab z.B. ein Spiel für den C64 geschrieben (gibt hier auch einen Thread), natürlich hat der keinen x86-Prozessor, aber die Assembler-Denkweise ist grob gesagt die gleiche. Und da hab ich alles ohne OS-Funktionen gemacht (obwohl auch das möglich gewesen wäre, weil ja auch der C64 ein (fest integriertes) OS hat).

---

Mich wundert aber allgemein warum bei Dir INT 21H nicht funktioniert, weil aus Kompatibilitätsgründen müßte das unter Windows doch eigentlich immer noch laufen...
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Little John

Beitrag von Little John »

ZeHa hat geschrieben:INT 21H ist sozusagen die "WinAPI des DOS" :mrgreen:
WinAPI nicht, aber API ja.
ZeHa hat geschrieben:Mich wundert aber allgemein warum bei Dir INT 21H nicht funktioniert, weil aus Kompatibilitätsgründen müßte das unter Windows doch eigentlich immer noch laufen...
Windows läuft ja im Protected Mode. Kann man da denn überhaupt Real Mode Interrupts aufrufen?

Gruß, Little John
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Little John hat geschrieben:
ZeHa hat geschrieben:INT 21H ist sozusagen die "WinAPI des DOS" :mrgreen:
WinAPI nicht, aber API ja.
Ist mir schon klar, sollte nur beispielhaft sein, weil mit dem Begriff "WinAPI" normalerweise jeder sofort was anfangen kann. Daher die Anführungszeichen und der Smiley ;)
Little John hat geschrieben:
ZeHa hat geschrieben:Mich wundert aber allgemein warum bei Dir INT 21H nicht funktioniert, weil aus Kompatibilitätsgründen müßte das unter Windows doch eigentlich immer noch laufen...
Windows läuft ja im Protected Mode. Kann man da denn überhaupt Real Mode Interrupts aufrufen?
Naja wenn es nicht mehr funzen würde, dann würde auch kein einziges DOS-Programm mehr laufen, weil wahrscheinlich alle mit DOS-Funktionen arbeiten (allein schon Dateizugriff usw.). Windows 95 war das erste Windows im Protected Mode, und damals lief eigentlich noch ziemlich viel DOS-Zeug. Auch heute unter XP gibt's noch einiges was man laufen lassen kann. Vermutlich simuliert Windows dem DOS-Programm dann einfach eine gewisse Real-Mode-Umgebung oder so (brauchen ja eh nur 640K zu sein).
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Little John

Beitrag von Little John »

ZeHa hat geschrieben:
Little John hat geschrieben:
ZeHa hat geschrieben:INT 21H ist sozusagen die "WinAPI des DOS" :mrgreen:
WinAPI nicht, aber API ja.
Ist mir schon klar, sollte nur beispielhaft sein, weil mit dem Begriff "WinAPI" normalerweise jeder sofort was anfangen kann. Daher die Anführungszeichen und der Smiley ;)
Das hab ich mir gedacht, ich wollte nur die Variante ohne Anführungszeichen und Smiley noch dazuschreiben. ;-)
ZeHa hat geschrieben:
Little John hat geschrieben:
ZeHa hat geschrieben:Mich wundert aber allgemein warum bei Dir INT 21H nicht funktioniert, weil aus Kompatibilitätsgründen müßte das unter Windows doch eigentlich immer noch laufen...
Windows läuft ja im Protected Mode. Kann man da denn überhaupt Real Mode Interrupts aufrufen?
Naja wenn es nicht mehr funzen würde, dann würde auch kein einziges DOS-Programm mehr laufen, weil wahrscheinlich alle mit DOS-Funktionen arbeiten (allein schon Dateizugriff usw.). Windows 95 war das erste Windows im Protected Mode, und damals lief eigentlich noch ziemlich viel DOS-Zeug. Auch heute unter XP gibt's noch einiges was man laufen lassen kann. Vermutlich simuliert Windows dem DOS-Programm dann einfach eine gewisse Real-Mode-Umgebung oder so (brauchen ja eh nur 640K zu sein).
Sorry, das hatte ich schlecht ausgedrückt. Die alten DOS-Programme, die jetzt noch unter Windows laufen, wurden ja mit einem DOS-Compiler compiliert. Und PB ist ein Windows-Compiler. Ich hätte besser geschrieben:
Kann ein Programm, das mit einem Windows-Compiler übersetzt wurde, überhaupt Real Mode Interrupts aufrufen?

Gruß, Little John
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Ahhh okay, ja das könnte natürlich ein Grund sein.
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
fsw
Beiträge: 74
Registriert: 12.09.2004 03:31
Wohnort: North by Northwest

Beitrag von fsw »

Max_der_Held hat geschrieben:Ahm.. Wo kriegt man denn derzeit ein aktuelles (gutes?^^) buch/Referenz über assembler her?.. ^^
Die meisten sind total veraltet, hier ist ein brauchbares (IMHO):

http://drpaulcarter.com/pcasm/

Wenn du runter scrollst dann siehst du auch eine Deutsche version.

Da sind auch noch die examples die man fuer verschiedene assemblers downloaden kann...

Hope this helps
fsw
Antworten