Seite 2 von 2

Verfasst: 03.04.2005 00:45
von MARTIN
@Laurin
Ich meinte interrupt 21h(vertippt). Wenn ich 12h gemeint hätte, hätte ich recht gehabt.
Ich war mir nicht sicher ob es dos oder bios interrupt ist, und war zu faul um es zu überprüfen.
Somit hatte traumatic recht das es DOS-Code war und ohne dos nicht funktioniert.
Jedenfalls, super das du die Liste und den Link gepostet hast.

Verfasst: 03.04.2005 00:49
von MVXA
Wieso ersten 2 Bytes der Nachricht? Für mich sieht das eher so aus als wenn das ding die Adresse von Nachricht in DX speichert.

Verfasst: 03.04.2005 08:06
von benny
@125:

Ich gehe mal davon aus, dass Du FASM benutzt, oder.
Dann probier mal folgendes HelloWorld ('ne .com Datei) :

Code: Alles auswählen

org 256
mov ah,9
mov dx,text_to_display
int 21h
int 20h
label text_to_display
db 'Hello World$'    

Verfasst: 03.04.2005 10:36
von 125
THX benny :) Das funzt. Auch wenn ich bei meinem hello world "org 256" vorsetze gehts :) Was bewirkt das?

Verfasst: 03.04.2005 11:56
von Laurin
@Martin:
Ich weiß :wink:

@MVXA:
Ich bin immernoch der Meinung, dass man LEA benutzen müsste:
Opcode-Hilfe von MASM hat geschrieben:LEA - Load Effective Address
Usage: LEA dest,src
Modifies flags: None
Transfers offset address of "src" to the destination register.
MOV - Move Byte or Word
Usage: MOV dest,src
Modifies flags: None
Copies byte or word from the source operand to the destination
operand. If the destination is SS interrupts are disabled except
on early buggy 808x CPUs. Some CPUs disable interrupts if the
destination is any of the segment registers.
@125:
Pff.. ist das lange her ;). Das mit dem ORG war nötig, damit der Assembler EXE- und COM-Dateien auseinanderhalten könnte. Der innere Aufbau einer (16-Bit) COM entsprach nicht dem einer (16-Bit) EXE. Bei EXEs musste man Segmente angeben (zB Daten-Segment, Codesegment etc.), dass war bei einer COM nicht nötig.

Das ist alles etwas kompliziert. Grob gesagt, läßt ORG 256 dein Programm an der Speicherstelle 256 starten.


Greetz Laurin

Verfasst: 03.04.2005 12:10
von remi_meier
@Laurin:
MOV eax, Nachricht
kopiert die Adresse von Nachricht in eax
MOV eax, [Nachricht]
kopiert 4Bytes von Nachricht in eax

Verfasst: 03.04.2005 13:04
von Laurin
:shock: Oh, stimmt ja. Ich glaube, ich habe zu lange nicht mehr "assembliert". Obwohl, ich bin ziemlich weit gekommen (hab zum Beispiel ein CMOS-Backupprogramm geschrieben).

Ich habe noch nichts dergleiche geshen: Wie sehen denn die 64-Bitregister vom Athlon 64 aus? xeax? eeax? Vorallem sollen ja auch einige Hilfsregister dazugekommen sein.

Verfasst: 03.04.2005 19:22
von remi_meier
AFAIK sind glaub sehr viele neue Register dazugekommen (eins heisst glaub rdx). Das Lustige ist, dass bei Funktionsaufrufen jetzt nicht mehr die Parameter auf den Stack gelegt werden, sondern in die Register -> SPEED.
Hab ich nur irgendwo aufgeschnappt, aber wenn du es genau wissen willst, schau in die Hilfe vom Fasm 1.60 :D