![]() |
Assembler, was bedeutet $
Code:
also hier hab ich noch ein paar fragen:
.DATA;----------------------------------------------------------
; ( 1 ) MiniArray EQU $ ; ( 2 ) ORG $ + 32 ;reserviert 32 Byte ; ( 3 ) i DW ? ;kriegt ein Alias-Symbol: iLow EQU $-2 ;...:für das 1.Byte ; ;... und ein eigenes Symbol iHigh EQU $-1 ;...:für das 2.Byte DsDatenPointer DW OFFSET DsDatenPointer ;Zeigt auf sich selbst! .CODE;---------------------------------------------------------- ; ( 4 ) ;Indizierter Zugriff auf das 3.Byte von MiniArray MOV DI,2; MOV BYTE PTR (MiniArray+DI),Do ; Bei Do handelt es sich um ein EQU: Do EQU '$' ;MOV BYTE PTR (MiniArray+2),36 ; ( 5 ) ;Indirekter Wort-Zugriff mit Indizierung (auf "iLow" bzw "i") MOV DI,2 MOV BX,DsDatenPointer ; zeigt auf sich selbst => wirkt wie MOV BX,OFFSET DsDatenPointer MOV WORD PTR [BX-DI],5 zu ( 1 ): was bedeutet dieses $ und was mache ich mit MiniArray EQU $??? zu ( 2 ): was macht ORG $ + 32 zu ( 3 ): definiere ich hier ein Word (also 2 bytes) und iLow zeigt aufs erste Byte von i und iHigh aufs zweite Byte. Was macht in diesem Fall $ genau?! zu ( 4 ): was passiert hier? versteh ich irgendwie überhaupt nicht? BYTE PTR? zu ( 5 ): was passiert hier? wär klasse wenn mir jemand ein paar Fragen möglichst ausführlich erklären würde. Vielen Dank schonmal |
Re: Assembler, was bedeutet $
Zitat:
Zitat:
Nimmt man (1) und (2) zusammen, so wird MiniArray auf das erste Byte zeigen. Danach folgen 31 weitere Bytes (insg 32 Bytes), die ungenutzt sind und den Kommentaren zu folge für das MiniArray benutzt werden. Man hätte das auch so schreiben können:
Code:
MiniArray DB 32 DUP(?)
Zitat:
Zitat:
Zitat:
Denn "DsDatenPointer DW OFFSET DsDatenPointer" erzeugt ein Word, dessen Inhalt der Offset dieses Words selbst ist. Und das ist wiederum der aktuelle Programmcodezähler $. Und von diesem wird wieder DI abgezogen, womit wir wieder bei der Addresse von "i" landen. In in diesen wird dann die Zahl 5 gemovt. |
Re: Assembler, was bedeutet $
danke :thumb: für die antworten jetzt hab ichs glaub ich kapiert. nur noch eine Frage dazu:
Zitat:
ein was versteh ich aber trotzdem noch nicht so ganz: MOV WORD PTR [BX-DI],5 hätte es jetzt einen Unterschied gemacht folgendes zu schreiben: MOV BYTE PTR [BX-DI],5 transferriert MOV WORD PTR [BX,DI],5 ins Byte 1 von i 5 und ins Byte 2 auch 5, oder wie? |
Re: Assembler, was bedeutet $
Zitat:
Zitat:
Im 16-Bit Modus gibt es nur eine begrenzte Zahl von Adressierungsmodi:
Code:
Jeweils optional mit Byte/Word-Displacement.
[BP]
[BX] [SI] [DI] [BP+SI] [BP+DI] [BX+SI] [BX+DI] |
Re: Assembler, was bedeutet $
Zitat:
Code:
Wenn nun in Word(DS:34,DS:35) (=DsDatenPointer) die Zahl 34 steht (=OFFSET DsDatenPointer) und man davon nun 2 abzieht, landt man bei 32, was wiederum der Offset von "i" ist.
DS:00 MiniArray
DS:32 i DS:34 DsDatenPointer CS:00 MOV DI, 2 ... Zitat:
Zitat:
|
Re: Assembler, was bedeutet $
Zitat:
das mit MOV BYTE PTR und MOV WORD PTR hab ich jetzt auch verstanden danke :bounce1: vielen dank |
Re: Assembler, was bedeutet $
[quote="Flocke"]
Zitat:
|
Re: Assembler, was bedeutet $
zu ( 5 ) noch was:
müsste soetwas nicht auch gehen? MOV AL,BYTE PTR DX tut aber leider nicht: **Error** LSG2-1.ASM(36) Operand types do not match warum? |
Re: Assembler, was bedeutet $
Wenn du durch type overwrite die Datengrösse angibst, dann musst du die [] drum machen, also
mov al, byte ptr [dx] |
Re: Assembler, was bedeutet $
ok, das heißt [] funktioniert eigentlich nur im speicher, nicht auf register, oder?
|
Re: Assembler, was bedeutet $
Zitat:
|
Re: Assembler, was bedeutet $
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:56 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 by Thomas Breitkreuz