![]() |
AW: C++ Operator |= in Delphi
Sei mir nicht böse. Aber du schriebst:
Zitat:
Bevor man nämlich mit Registern rumspielt, sollte man wissen wie die CPU funktioniert (zumindest aus Software-Perspektive) und dazu muß man schon mindestens die genannten Operatoren beherrschen, sowie einige weitere ... |
AW: C++ Operator |= in Delphi
Zitat:
Ich habe mir auch schon überlegt ein gutes Buch zuzutun. (grässliches Wort :)) Du hast nicht zufällig einen guten Vorschlag? Ich habe ein Buch aber da sind eben nur die grundlagigsten Grundlagen drinne :( Naja, wie gesagt wenn du 'nen Vorschlag hast, her damit! Zitat:
Also ist das sozusagen eine kompliziertere Version von einem booleschen Wert? :lol: (beziehungsweise mehrere boolesche Werte) Ich weiss ja nicht aber verstehst du rein zufällig wieso das bei dem Beispiel von vorher gemacht wird?
Delphi-Quellcode:
$1 = 1b
//HW BP Nummer 1//
ctx.Dr0:= $ADDRESSE1; ctx.Dr7:= $00000001; //HW BP Nummer 2// ctx.Dr1:= $ADDRESSE2; ctx.Dr7:= ctx.Dr7 or $00000004; //HW BP Nummer 3// ctx.Dr2:= $ADDRESSE3; ctx.Dr7:= ctx.Dr7 or $00000010; //HW BP Nummer 4// ctx.Dr3:= $ADDRESSE4; ctx.Dr7:= ctx.Dr7 or 00000040; $4 = 100b sind wieder 100 binär richtig? 100b 10000b sind wieder 10000 binär 10000b 1000000b auch das sind wieder 1000000 binär Wieso werden denn da nicht einfach die Werte zugewiesen, das ist ja gar nicht nötig wenn es wieder das gleiche gibt wie wenn man nichts macht :gruebel: |
AW: C++ Operator |= in Delphi
Bücher auf Deutsch oder darf's auch Englisch sein?
Zitat:
Ein Nibble sind 4bit, also ein halbes Oktett (Oktette werden üblicherweise als Bytes bezeichnet). Nun zur Korrelation der Werte:
Code:
Über diese Tabelle kannst du selbst im Kopf einfach von/nach binär umrechnen. Wir wissen nämlich nun, daß eine Hexadezimalstelle vier Binärstellen entspricht. Beispiel:
binär | hexadezimal | dezimal
------------------------------ 0000 | $0 | 0 0001 | $1 | 1 0010 | $2 | 2 0011 | $3 | 3 0100 | $4 | 4 0101 | $5 | 5 0110 | $6 | 6 0111 | $7 | 7 1000 | $8 | 8 1001 | $9 | 9 1010 | $A | 10 1011 | $B | 11 1100 | $C | 12 1101 | $D | 13 1110 | $E | 14 1111 | $F | 15
Code:
Leserichtung "nach oben", also 10101011.11001101.11101111.
$ABCDEF
||||||__ 1111 |||||___ 1110 ||||____ 1101 |||_____ 1100 ||______ 1011 |_______ 1010 Zitat:
Delphi-Quellcode:
ctx.Dr7 hat bereits irgendeinen Wert. Es ist für uns unwichtig, aber wir wollen das Bit setzen welches durch $00000040 repräsentiert wird - man nennt das Bitmaske. Wenn wir in unserer Tabelle nachschauen, sehen wir:
ctx.Dr3:= $ADDRESSE4;
ctx.Dr7:= ctx.Dr7 or $00000040;
Code:
Da man bei Bits von 0 und von "hinten" zu zählen beginnt
$40 == 01000000
Code:
wollen wir also Bit 6 setzen ohne die anderen Bits zu beeinflussen. Deswegen hier ein bitweises Oder.
0 1 0 0 0 0 0 0
| | | | | | | | 7 6 5 4 3 2 1 0 * Hier ein paar Beispiele für den Wert in Dr7 davor und danach. Wobei wir hier der Einfachheit halber nur die unteren beiden Nibble (also die unteren 8 Bit) betrachten). Alles binär:
Code:
Da unsere Bitmaske $40 nur ein gesetztes Bit hat, wird auch nur dieses beeinflußt. Entsprechend ändert sich im Ergebnis nur Bit 6.
[Dr7] or 01000000 == ...
---------------------------- 00000000 or 01000000 == 01000000 00000001 or 01000000 == 01000001 00010001 or 01000000 == 01010001 00010010 or 01000000 == 01010010 00100010 or 01000000 == 01100010 00100011 or 01000000 == 01100011 00110011 or 01000000 == 01110011 00110100 or 01000000 == 01110100 01000100 or 01000000 == 01000100 01000101 or 01000000 == 01000101 01010101 or 01000000 == 01010101 01010110 or 01000000 == 01010110 01100110 or 01000000 == 01100110 01100111 or 01000000 == 01100111 01110111 or 01000000 == 01110111 01111000 or 01000000 == 01111000 10001000 or 01000000 == 11001000 10001001 or 01000000 == 11001001 10011001 or 01000000 == 11011001 10011010 or 01000000 == 11011010 10101010 or 01000000 == 11101010 10101011 or 01000000 == 11101011 10111011 or 01000000 == 11111011 10111100 or 01000000 == 11111100 11001100 or 01000000 == 11001100 11001101 or 01000000 == 11001101 11011101 or 01000000 == 11011101 11011110 or 01000000 == 11011110 11101110 or 01000000 == 11101110 11101111 or 01000000 == 11101111 11110000 or 01000000 == 11110000 11111111 or 01000000 == 11111111 |
AW: C++ Operator |= in Delphi
Zitat:
Deiner Logik zu folge wäre dann 1 + 100 = 200 :stupid: Das stimmt natürlich nicht, da die 1 ja die gleiche Wertigkeit wie die rechte 0 in 100 hat. Du musst es rechtsbündig ausrichten:
Code:
Nun, was kommt jetzt bei 100b or 10000b raus? :wink:
$1 = __1b or
$4 = 100b = $5 = 101b |
AW: C++ Operator |= in Delphi
Ich kenne kaum ein Forum in dem die Leute einem einfach so soviel, so gut erklären wie hier :dp:
@Assarbad Zu den Büchern: Vorzugsweise Deutsch aber wenn du etwas besseres in Englisch kennst geht das auch :-D Ich glaube jetzt habe ich es verstanden. Zuerst wird
Delphi-Quellcode:
einfach ein Wert zugewiesen.
ctx.Dr7:= $00000001;
Dann
Delphi-Quellcode:
ctx.Dr7:= ctx.Dr7 or $00000004;
Code:
weiter..
00000001
00000100 -------- 00000101
Delphi-Quellcode:
ctx.Dr7:= ctx.Dr7 or $00000010;
Code:
noch weiter..
00000101
00010000 -------- 00010101
Delphi-Quellcode:
ctx.Dr7:= ctx.Dr7 or 00000040;
Code:
Aber der Wert den Dr7 schlussendlich enthält, der zeigt dann welche Hardwarebreakpoints benutzt werden? (also auf 1)
00010101
01000000 -------- 01010101 Ich denke ich habe es nun begriffen, vielen Dank für die ausführlichen Erklärungen.:) @Deep-Sea Da habe ich wohl einen groben Fehler gemacht :? Aber so wie du es erklärst klingt es logisch! |
AW: C++ Operator |= in Delphi
Zitat:
|
AW: C++ Operator |= in Delphi
Wurde heute gerade hier im Forum verlinkt:
![]() Sollte ein wenig beim Verständnis helfen wo es jetzt vielleicht noch mangelt. |
AW: C++ Operator |= in Delphi
Okay, das werde ich mir bestimmt mal durchlesen :-D
Hast du noch Vorschläge für gute Bücher? Denke mal das mit den Bitmasken ist nicht das einzige was ich verpasst habe, ohne ein gutes Buch :? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:44 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