Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [ASM] Einzelnes Zeichen ausgeben - Aber wie? (https://www.delphipraxis.net/87306-%5Basm%5D-einzelnes-zeichen-ausgeben-aber-wie.html)

fwsp 26. Feb 2007 19:35


[ASM] Einzelnes Zeichen ausgeben - Aber wie?
 
hallo,

ich versuche mich grad ein wenig an asm. ich würde gern ein einzelnes zeichen ausgeben lassen.
das versuche ich mit dem folgenden code, klappt aber leider nicht. es wird nichts angezeigt, es gibt nur von windows den hinweis das der befehl ungültig sei. kann mir jemand helfen?
danke.
Code:
org 100h
segment code
   start:   
      mov dx, 'C'
      mov ah, 02h
      int 21h

sirius 26. Feb 2007 19:39

Re: [ASM] Einzelnes Zeichen ausgeben - Aber wie?
 
Lies dir mal bitte "protected mode" einer CPU durch. Dann reden wir weiter.

Oder anders gesagt. Dierechnerarchitektur hat sich seit 1990 weiterentwickelt. :zwinker:

bigg 26. Feb 2007 19:41

Re: [ASM] Einzelnes Zeichen ausgeben - Aber wie?
 
Fehler markiert...

Zitat:

org 100h
segment code
start:
mov dl, 'C'
mov ah, 02h
int 21h

fwsp 26. Feb 2007 19:45

Re: [ASM] Einzelnes Zeichen ausgeben - Aber wie?
 
to sirius:
ich bin noch anfänger. ich hab noch keine große ahnung von den tiefen der cpu.

to bigg:
danke. ich muss allerdings immernoch 2 angeblich ungültige befehle ignorieren, bevor er mir das C ausgibt.

sirius 26. Feb 2007 19:49

Re: [ASM] Einzelnes Zeichen ausgeben - Aber wie?
 
Wo programmierst du denn?

fwsp 26. Feb 2007 19:50

Re: [ASM] Einzelnes Zeichen ausgeben - Aber wie?
 
Zitat:

Zitat von sirius
Wo programmierst du denn?

zu hause. :mrgreen:
was meinst du?

bigg 26. Feb 2007 19:54

Re: [ASM] Einzelnes Zeichen ausgeben - Aber wie?
 
Lass dir mal nicht alles aus der Nase ziehen...Welchen Assembler verwendest du?
Erzeugt der Assembler MZ-Anwendungen? Ist ein Linker notwendig? Mit welchem Betriebssystem arbeitest du?

sirius 26. Feb 2007 19:55

Re: [ASM] Einzelnes Zeichen ausgeben - Aber wie?
 
Auf welchem System? Hast du irgendeine virtuelle Maschine oder direkt einen 286 vor dir stehen? Schreibst du grad dein eigenes BS, oder programmierst du direkt unter Windows?

fwsp 26. Feb 2007 19:58

Re: [ASM] Einzelnes Zeichen ausgeben - Aber wie?
 
ich benutz den nasm unter windows 0.98.
ich erzeug damit ne com datei. es wird nichts gelinkt. soll bei dem nasm nur für exen notwendig sein.

//edit1
ich hab das jetzt so gemacht:
Code:
org 100h
start:
   mov dx, hello_world
   mov ah, 09h
   int 21h
   mov ah, 4Ch
   int 21h
   
section .data
   hello_world: db 'hello, world', 13, 10, '$'

sirius 26. Feb 2007 20:11

Re: [ASM] Einzelnes Zeichen ausgeben - Aber wie?
 
Und hast du das im Real Mode gestartet?

Muetze1 26. Feb 2007 20:29

Re: [ASM] Einzelnes Zeichen ausgeben - Aber wie?
 
Zitat:

Zitat von sirius
Und hast du das im Real Mode gestartet?

Das ist Schnuppe, wenn es eine COM Datei ist. Schliesslich wird eine COM nur im Realmode in einem Segment geladen & ausgeführt.

Code:
org 100h
start:
   push cs
   pop ds
   mov dx, offset hello_world
   mov ah, 09h
   int 21h
   mov ah, 4Ch
   int 21h
   
hello_world db 'hello, world', 13, 10, '$'
Siehe auch INT 21h, FUNC 09h

sirius 26. Feb 2007 20:37

Re: [ASM] Einzelnes Zeichen ausgeben - Aber wie?
 
Zitat:

Zitat von Muetze1
Das ist Schnuppe, wenn es eine COM Datei ist. Schliesslich wird eine COM nur im Realmode in einem Segment geladen & ausgeführt.

Wie? Und dann greift man einfach mal so auf den Interrupt zu?

Muetze1 26. Feb 2007 20:49

Re: [ASM] Einzelnes Zeichen ausgeben - Aber wie?
 
Zitat:

Zitat von sirius
Zitat:

Zitat von Muetze1
Das ist Schnuppe, wenn es eine COM Datei ist. Schliesslich wird eine COM nur im Realmode in einem Segment geladen & ausgeführt.

Wie? Und dann greift man einfach mal so auf den Interrupt zu?

Ja, genau. Schliesslich werden COM's immer in einer Real Mode kompatiblen Umgebung ausgeführt. Entweder reines DOS (oder DOS mit XMS im V86 Modus) oder unter Windows, dann entweder im V86 Modus oder in einer NT VDM (Virtual DOS Machine), welche auch wieder einen Real Mode den Dateien simuliert und die INT Aufrufe entsprechend umlegt bzw. simuliert.

Ich weiss auch nicht, was die provokative Frage soll, schliesslich sind im RealMode die meisten unteren Interrupts Service Provider mit genügend Funktionen. Wenn man im Real Mode ist, hat man die Chance einen String entweder über das BIOS (INT 10h), DOS (INT 21h, INT 29h) oder anderen Systemen aus. Oder willst du mit der Frage behaupten, dass du alles direkt in den Video RAM geschrieben hattest im Real Mode?

sirius 26. Feb 2007 20:54

Re: [ASM] Einzelnes Zeichen ausgeben - Aber wie?
 
Ich hatte dabei jetzt gar nicht in die Ausgabe gedacht, sondern eher an die eingabe. Aber gut, das wird ja auch emuliert und äh ja interessant. Habe mich noch nie mit COM unter Windows beschäftigt. Aber ich sehe jetzt auch keine Notwendigkeit.

Muetze1 26. Feb 2007 22:06

Re: [ASM] Einzelnes Zeichen ausgeben - Aber wie?
 
Zitat:

Zitat von sirius
Habe mich noch nie mit COM unter Windows beschäftigt.

Ich will in dem Zusammenhang für die Nachwelt darauf hinweisen, dass hier von einer Dateiendung bzw. Format geredet wird. Also eine executable nur nicht mit .EXE sondern mit einer .COM Endung. Der Erklärungshint der dp.net nennt diese Möglichkeit nicht und wir reden hier nicht über das Component Object Model und auch nicht über die TLD.

COM Dateien sind eins der einfachsten ausführbaren Dateien auf einem DOS System bzw. maximal Windows 2003 Systems. Ab Vista wird es keine NT VDM mehr geben und von daher werden damit auch die .COM Dateien aussterben.

sirius 27. Feb 2007 06:58

Re: [ASM] Einzelnes Zeichen ausgeben - Aber wie?
 
Ohja, macnhmal verwirren die kleinen Hint-Windows. Und das ist nicht nur bei Command-Files so. Aber ich denke, der Kontext hier würde auch aufklären :wink:

Mavarik 27. Feb 2007 09:58

Re: [ASM] Einzelnes Zeichen ausgeben - Aber wie?
 
Zitat:

Zitat von sirius
Wie? Und dann greift man einfach mal so auf den Interrupt zu?

Naja, da auch unter Windows immer noch BP7/TP7 Programme ausgeführt werden können...Ü brings funktionieren nicht nur die INT's, sondern auch direktes schreiben in dem Bildschirm(DOS) Speicher...

Frank :coder:

So war das früher ohne Klick&Compile IDE... (Oh man bin ich alt :pale: )

Muetze1 27. Feb 2007 10:32

Re: [ASM] Einzelnes Zeichen ausgeben - Aber wie?
 
Zitat:

Zitat von Mavarik
Naja, da auch unter Windows immer noch BP7/TP7 Programme ausgeführt werden können...Ü brings funktionieren nicht nur die INT's, sondern auch direktes schreiben in dem Bildschirm(DOS) Speicher...

Was aber nicht mehr "direkt" ist. Die NTVDM handelt dies und setzt es um.

Mavarik 27. Feb 2007 11:58

Re: [ASM] Einzelnes Zeichen ausgeben - Aber wie?
 
Zitat:

Zitat von Muetze1
Was aber nicht mehr "direkt" ist. Die NTVDM handelt dies und setzt es um.

Logisch... Da an der entsprechenden Adresse kein V-Ram ist...

Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz