Meine ersten Schritte in ASM

Fragen zu allen anderen Programmiersprachen.
MARTIN
Beiträge: 454
Registriert: 08.09.2004 14:03
Wohnort: Kiel

Beitrag 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.
Amilo 1667|Suse Linux 10.1_64bit/WinXP |PB 4.00/3.94
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag 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.
Bild
Benutzeravatar
benny
Beiträge: 383
Registriert: 29.08.2004 09:18
Wohnort: Am Ende des www's
Kontaktdaten:

Beitrag 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$'    
So long,
benny!
.
nur t0te f1sche schw1mmen m1t dem str0m - 00100 !
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag von 125 »

THX benny :) Das funzt. Auch wenn ich bei meinem hello world "org 256" vorsetze gehts :) Was bewirkt das?
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag 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
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

@Laurin:
MOV eax, Nachricht
kopiert die Adresse von Nachricht in eax
MOV eax, [Nachricht]
kopiert 4Bytes von Nachricht in eax
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag 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.
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag 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
Antworten