Assembler-Quiz
-
- Beiträge: 1983
- Registriert: 16.08.2005 18:15:29
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: münchen
Assembler-Quiz
Anbei mal ein kleines Assambler-Quiz, Achtung nicht zu kompliziert denken, aber auf jedes Wort achten:
Software-Interrupt: Zeichen ´A´ ausgeben.
mov ah, 02
mov dl, 41
int 21h rem DOS-Interrupt Zeichen ausgeben
int 20
Dürfte mit dem nasm unter Linux nicht funktionieren.
Software-Interrupt: Zeichen ´A´ ausgeben.
mov ah, 02
mov dl, 41
int 21h rem DOS-Interrupt Zeichen ausgeben
int 20
Dürfte mit dem nasm unter Linux nicht funktionieren.
Es gibt viele Foren und eine Welt ausserhalb
- Livingston
- Beiträge: 1816
- Registriert: 04.02.2007 22:52:25
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: 127.0.0.1
Re: Assembler-Quiz
Falls Du ein BIOS-System hast (kein UEFI):
Erst runterschalten auf Real-Mode, Videokarte umschalten, "A" ausgeben... und zusehen, dass ab jetzt nix mehr geht
Und das rem würd ich noch durch ";" ersetzen. Aber das war's dann wirklich.
Hexadezimal statt dezimal schadet bestimmt auch nicht.
Erst runterschalten auf Real-Mode, Videokarte umschalten, "A" ausgeben... und zusehen, dass ab jetzt nix mehr geht
Und das rem würd ich noch durch ";" ersetzen. Aber das war's dann wirklich.
Hexadezimal statt dezimal schadet bestimmt auch nicht.
Der Hauptunterschied zwischen etwas, was möglicherweise kaputtgehen könnte und etwas, was unmöglich kaputtgehen kann, besteht darin, dass sich bei allem, was unmöglich kaputtgehen kann, falls es doch kaputtgeht, normalerweise herausstellt, dass es unmöglich zerlegt oder repariert werden kann.
Douglas Adams
Douglas Adams
-
- Beiträge: 1983
- Registriert: 16.08.2005 18:15:29
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: münchen
Re: Assembler-Quiz
Das rem ist kein nasm, stimmt.
Es ist aber, wenn mans weiß, ein ganz banaler Grund, wenn man´s weiß.
Es ist aber, wenn mans weiß, ein ganz banaler Grund, wenn man´s weiß.
Es gibt viele Foren und eine Welt ausserhalb
- Livingston
- Beiträge: 1816
- Registriert: 04.02.2007 22:52:25
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: 127.0.0.1
Re: Assembler-Quiz
Interrupt 21h
Der Hauptunterschied zwischen etwas, was möglicherweise kaputtgehen könnte und etwas, was unmöglich kaputtgehen kann, besteht darin, dass sich bei allem, was unmöglich kaputtgehen kann, falls es doch kaputtgeht, normalerweise herausstellt, dass es unmöglich zerlegt oder repariert werden kann.
Douglas Adams
Douglas Adams
-
- Beiträge: 1983
- Registriert: 16.08.2005 18:15:29
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: münchen
Re: Assembler-Quiz
Das werte ich als lösung.
Der MS-DOS-Interrupt 21h dürfte unter Linux nicht funktionieren, ich habs allerdings nicht eingegeben.
Der MS-DOS-Interrupt 21h dürfte unter Linux nicht funktionieren, ich habs allerdings nicht eingegeben.
Es gibt viele Foren und eine Welt ausserhalb
- Livingston
- Beiträge: 1816
- Registriert: 04.02.2007 22:52:25
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: 127.0.0.1
Re: Assembler-Quiz
Interrupt 21h geht unter Linux wahrscheinlich ins Leere, sicher aber nicht zu irgendwas Brauchbarem.
Nebstbei: Der Versuch, irgendwas anderes als int80h aufzurufen, wird vom Kernel sofort bestraft. Der 80er ist der einzige, den ein User (und auch root) unter Linux nutzen darf. Alle anderen führen zu einer Exception wegen mangelnder Privilegien. Interrupt 80h war [*] die Schnittstelle zum Kernel (syscall), was am ehesten dem int21h aus DOS nahekommt.
[*] Wird heute zwar nicht mehr von libc und Co verwendet, weil zu langsam und träge, ist aber wohl immer noch eine Möglichkeit, den Kernel anzusprechen.
NACHTRAG:
Ein paar gaaanz einfache Beispiele für die Kernelschnittstelle sehen so aus: https://www.tutorialspoint.com/assembly ... _calls.htm
Nebstbei: Der Versuch, irgendwas anderes als int80h aufzurufen, wird vom Kernel sofort bestraft. Der 80er ist der einzige, den ein User (und auch root) unter Linux nutzen darf. Alle anderen führen zu einer Exception wegen mangelnder Privilegien. Interrupt 80h war [*] die Schnittstelle zum Kernel (syscall), was am ehesten dem int21h aus DOS nahekommt.
[*] Wird heute zwar nicht mehr von libc und Co verwendet, weil zu langsam und träge, ist aber wohl immer noch eine Möglichkeit, den Kernel anzusprechen.
NACHTRAG:
Ein paar gaaanz einfache Beispiele für die Kernelschnittstelle sehen so aus: https://www.tutorialspoint.com/assembly ... _calls.htm
Der Hauptunterschied zwischen etwas, was möglicherweise kaputtgehen könnte und etwas, was unmöglich kaputtgehen kann, besteht darin, dass sich bei allem, was unmöglich kaputtgehen kann, falls es doch kaputtgeht, normalerweise herausstellt, dass es unmöglich zerlegt oder repariert werden kann.
Douglas Adams
Douglas Adams
-
- Beiträge: 1983
- Registriert: 16.08.2005 18:15:29
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: münchen
Re: Assembler-Quiz
Ich hab´s jetzt mal spaßeshalber eingegeben, die Fehlermeldung gibt aber keinen Hinweis auf den falschen Interrupt:
-----------------------------------
%include "io64.inc"
section .text
global CMAIN
CMAIN:
;write your code here
mov ah, 02
mov dl, 41h
int 21h
int 20h
-----------------------------------
-----------------------------------
%include "io64.inc"
section .text
global CMAIN
CMAIN:
;write your code here
mov ah, 02
mov dl, 41h
int 21h
int 20h
-----------------------------------
Es gibt viele Foren und eine Welt ausserhalb
-
- Beiträge: 1983
- Registriert: 16.08.2005 18:15:29
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: münchen
Re: Assembler-Quiz
Danke, gespeichert in "livingston_assembler_link.txt" für weiteres SurfenLivingston hat geschrieben:03.11.2024 19:30:35Interrupt 21h geht unter Linux wahrscheinlich ins Leere, sicher aber nicht zu irgendwas Brauchbarem.
Nebstbei: Der Versuch, irgendwas anderes als int80h aufzurufen, wird vom Kernel sofort bestraft. Der 80er ist der einzige, den ein User (und auch root) unter Linux nutzen darf. Alle anderen führen zu einer Exception wegen mangelnder Privilegien. Interrupt 80h war [*] die Schnittstelle zum Kernel (syscall), was am ehesten dem int21h aus DOS nahekommt.
[*] Wird heute zwar nicht mehr von libc und Co verwendet, weil zu langsam und träge, ist aber wohl immer noch eine Möglichkeit, den Kernel anzusprechen.
NACHTRAG:
Ein paar gaaanz einfache Beispiele für die Kernelschnittstelle sehen so aus: https://www.tutorialspoint.com/assembly ... _calls.htm
Es gibt viele Foren und eine Welt ausserhalb
- Livingston
- Beiträge: 1816
- Registriert: 04.02.2007 22:52:25
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: 127.0.0.1
Re: Assembler-Quiz
Der Assembler macht keine Annahmen von der Umgebung, es wird einfach nur ausgeführt, was Du ihm vorgibst. Da int ein regulärer Befehl ist, wird er natürlich ausgeführt. Wenn aber der Interrupt-Vektor ins nichts/auf was nicht Lauffähiges zeigt oder dem User untersagt ist, diesen Interrupt aufzurufen, dann knallt's eben zur Laufzeit.mampfi hat geschrieben:04.11.2024 10:41:40Ich hab´s jetzt mal spaßeshalber eingegeben, die Fehlermeldung gibt aber keinen Hinweis auf den falschen Interrupt:
Unter Linux kommt hinzu, dass sich die Interrupt-Vektoren nicht da befinden, wo Du sie unter DOS findest, zudem sind sie anders aufgebaut. Dann noch die User-Rechte: Du darfst nicht alles machen, was unter DOS ging. Der Kernel ist der Boss und teilt ein, was eine privilegierte Aktion ist (Kernel darf jeden Befehl aufrufen), und was unter User-Rechten läuft (User darf nicht jeden Befehl nutzen, darf nur an zugewiesenen Adressen schnüffeln und vieles andere).
Der Hauptunterschied zwischen etwas, was möglicherweise kaputtgehen könnte und etwas, was unmöglich kaputtgehen kann, besteht darin, dass sich bei allem, was unmöglich kaputtgehen kann, falls es doch kaputtgeht, normalerweise herausstellt, dass es unmöglich zerlegt oder repariert werden kann.
Douglas Adams
Douglas Adams