![]() |
Assembler und Zeiger
Also ich hab folgenden Code:
Code:
was ist jetzt richtiger?! und vorallem warum?
.MODEL TINY
.STACK 384 .DATA Operand DB 'Hello$' Zeiger DW OFFSET Operand BefehlsAdressZeiger DW OFFSET Marke ;$-begrenzte Ausgabe am Bildschirm DollarPutVdu MACRO VirtPufAdr ;VirtPufAdr: 1)Immediate 2)DS-Wort-Bezeichner 3)Register PUSH DX ; Retten in Keller PUSH AX ; Retten MOV DX,VirtPufAdr ; das zuerst, damit auch "DollarPutVdu AX" geht! MOV AH,09h INT 33 POP AX ; Restaurieren aus Keller POP DX ; Restaurieren ENDM .CODE Startpunkt: MOV AX,@DATA MOV DS,AX MOV BX, [Zeiger] ; (1) DollarPutVdu BX Marke: MOV AH,76 ; Programm beenden INT 33 END Startpunkt; wenn ich bei (1) MOV BX, Zeiger oder MOV BX, [Zeiger] mache. funktionieren tuen beide sachen in meinem Assembler. meiner meinung nach ist doch MOV BX, [Zeiger] richtiger..., weil ich ja den Inhalt von Zeiger (also den OFFSET Operand) haben möchte, um dann über die Offset Adresse Operand auszugeben. [Soweit ich das aber in erinnerung habe, hat mein prof gemeint das andere (MOV BX, Zeiger) ist richtig ???] |
Re: Assembler und Zeiger
Ist Zeiger eine Variable?
Wenn ja, dann ist Zeiger intern bereits als [Zeiger] definiert und da der Delphi-Assembler immer nur eine [] akzeptiert, macht ignoriert der einfach alle weiteren, also aus [[Zeiger]] wird einfach [Zeiger] gemacht . Und da ja intern schon eine [] ist, wird demnach deine [] ignoriert. Schau einfach mal in deinem CPU-Fenster nach, was der Compiler aus dieser Zeile macht. |
Re: Assembler und Zeiger
Zitat:
|
Re: Assembler und Zeiger
also er macht aus
MOV BX, Zeiger und aus MOV BX, [Zeiger] immer folgendes: MOV BX, [Zeiger] was bedeutet das jetzt bezüglich meiner frage? es handelt sich hier nicht um den delphi assembler, sondern den TASM |
Re: Assembler und Zeiger
Bei MASM und offensichtlich auch TASM macht es keinen Unterschied, ob du mov BX, [Zeiger] oder mov BX, Zeiger schreibst. Beidemale wird der Wert, der an der Adresse Zeiger steht (in deinem Fall also OFFSET Operand) in BX geschrieben.
Welche Syntax man verwendet ist also letztendlich Geschmackssache. |
Re: Assembler und Zeiger
Zitat:
weil ja die Speicherzelle Zeiger die Offset Adresse Operand beinhaltet und ich sozusagen auf den Inhalt von Zeiger zugreifen will. umgedreht gefragt: warum transferriert mir MOV BX, Zeiger nicht die Adresse von Zeiger in BX??? Das sollte doch eigentlich auch möglich sein, bzw. wie ist dies denn dann möglich?! |
Re: Assembler und Zeiger
Code:
Die eckigen Klammern verwendet man eigentlich nur in Zusammenhang mit Registern, also EAX ist das Register selbst und [EAX] der Speicher, auf den EAX zeigt.
mov BX, Wert ; <-- Inhalt von Wert
mov BX, offset Wert ; <-- Adresse von Wert |
Re: Assembler und Zeiger
Hi,
ich habe nur bescheidene ASM-Kenntnisse aber soweit ich weiß, empfiehlt sich der Befehl lea. Lea ist in die elegantere Variante.
Code:
mov bx, offset Text ---> lea bx, text
|
Re: Assembler und Zeiger
Zitat:
Zitat:
Code:
.DATA
BefehlsAdressZeiger DW OFFSET Marke, OFFSET Marke2, OFFSET Marke3 .CODE JMP [BefehlsAdressZeiger+2] ; hier habe ich dann einen Jump zur Marke2 Marke: ... Marke2: ... Marke3: ... |
Re: Assembler und Zeiger
und was ist damit:
MOV BX,OFFSET Marke JMP [BX] ;warum muss ich hier JMP BX anstatt JMP [BX] verwenden?!?!?! Marke: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:22 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