Zitat von
Hagen:
Natürlich kann garnicht jede CPU Operation atomic sein.
Falsch, sie muß es sogar sein! Du kannst die auf dem Level der Maschinensprache nicht weiter aufspalten! Wie komplex der darunterliegende Microcode ist, ist
komplett irrelevant (, denn in der CPU wird jeder Opcode quasi wie eine Funktion behandelt ... bevor diese nicht zurückkehrt, gehts auch nicht weiter
(1))!
Zitat von
Hagen:
Selbst das Laden eines Integers in EAX mit MOV EAX,[Adresse] ist nur zu 1/4 atomic.
Sorry, sehe ich nicht so! EAX ist 4 Byte breit, also werden 4 Byte von dieser Adresse gelesen, komme was da wolle! Das hat was mit der Breite der Operanden zu tun. Der Assembler wird sich zB weigern sowas zu machen:
Code:
mov EAX, BYTE PTR [Adresse]
mov EAX, WORD PTR [Adresse]
Und dies aus gutem Grunde. Sollte ich was übersehen haben, kannst du gern nochmal ins Detail geben.
Hier noch die Unterstützung meiner Argumentation:
Code:
88 / r MOV r/m8,r8 Move r8 to r/m8
89 / r MOV r/m16,r16 Move r16 to r/m16
89 / r MOV r/m32,r32 Move r32 to r/m32
8A / r MOV r8,r/m8 Move r/m8 to r8
8B / r MOV r16,r/m16 Move r/m16 to r16
8B / r MOV r32,r/m32 Move r/m32 to r32
8C / r MOV r/m16,Sreg** Move segment register to r/m16
8E / r MOV Sreg,r/m16** Move r/m16 to segment register
A0 MOV AL, moffs8* Move byte at ( seg:offset) to AL
A1 MOV AX, moffs16* Move word at ( seg:offset) to AX
A1 MOV EAX, moffs32* Move doubleword at ( seg:offset) to EAX
A2 MOV moffs8*,AL Move AL to ( seg:offset)
A3 MOV moffs16*,AX Move AX to ( seg:offset)
A3 MOV moffs32*,EAX Move EAX to ( seg:offset)
B0+ rb MOV r8,imm8 Move imm8 to r8
B8+ rw MOV r16,imm16 Move imm16 to r16
B8+ rd MOV r32,imm32 Move imm32 to r32
C6 / 0 MOV r/m8,imm8 Move imm8 to r/m8
C7 / 0 MOV r/m16,imm16 Move imm16 to r/m16
C7 / 0 MOV r/m32,imm32 Move imm32 to r/m32
Verschiedene Operandenbreiten und -Kombinationen führen zu verschiedenen Opcodes.
(1): Hyperthreading schaltet nur unabhängige Befehle parallel ... und beim Itanium das Ausführen aufs Gratewohl (also sozusagen nach vorbeugend) ändert auch an oben geschildertem nix!