OR-Befehl (in Assembler)

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
zigapeda
Beiträge: 1753
Registriert: 06.03.2005 17:22
Wohnort: Kaufbeuren
Kontaktdaten:

OR-Befehl (in Assembler)

Beitrag von zigapeda »

Hallo leute

habe eine frage, nämmlich für was ist der OR befehl bei nasm?
da ich jetzt nicht extra ein nasm programm schreiben wollte, hab ich einfach den inlineASM von PB genommen und bin auf folgendes ergebniss gekommen. Bei

Code: Alles auswählen

OR al,bl
wird das ergebniss in al gespeichert
jetzt belege ich al und bl noch mit werten:

Code: Alles auswählen

MOV al,0x05
MOV bl,0x02
al: 00000101
bl: 00000010
ergebniss:
al: 00000010
warum ist das so?
eigentlich sollte da doch was anderes rauskommen oder nicht?
sonst könnte ich ja gleich MOV al,bl schreiben...
zum testen hab ich folgenden code verwendet:

Code: Alles auswählen

bla.b = 0
MOV al,0x05
MOV bl,0x03
MOV [v_bla],al
Debug bla
MOV [v_bla],bl
Debug bla
!or al,bl
MOV [v_bla],al
Debug bla
MOV [v_bla],bl
Debug bla
ich weiß, ich hab sehr kreative variablennamen^^

btw: es liegt nicht an FASM das das mit dem OR befehl nicht geht oder?
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping <)
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: OR befehl

Beitrag von Danilo »

zigapeda hat geschrieben:zum testen hab ich folgenden code verwendet:

Code: Alles auswählen

bla.b = 0
MOV al,0x05
MOV bl,0x03
MOV [v_bla],al
Debug bla
MOV [v_bla],bl
Debug bla
!or al,bl
MOV [v_bla],al
Debug bla
MOV [v_bla],bl
Debug bla
ich weiß, ich hab sehr kreative variablennamen^^

btw: es liegt nicht an FASM das das mit dem OR befehl nicht geht oder?
Das liegt daran das Du zwischendrin DEBUG aufrufst und die
Register dabei nicht sicherst. Danach machst Du das OR, aber
die Register wurden eben durch DEBUG schon verändert.

Du solltest Dir auch angewöhnen einen einheitlichen Style
zu verwenden. Inline-ASM kann man direkt schreiben, aber
dabei brauchst Du auch nicht das v_ bei Variablen verwenden.
Bei !DirectASM wird es direkt an den Assembler weitergeleitet,
so dass Du dann die ASM-Namen verwenden mußt. Dein Mix
funktioniert zwar, aber kann vielleicht mal zu Fehlern führen,
deshalb besser gleich einheitlichen Style nehmen wenn es geht.


!DirectASM:

Code: Alles auswählen

bla1.b = 0
bla2.b = 0
bla3.b = 0

!MOV al, 0x05
!MOV bl, 0x03

!MOV [v_bla1], al
!MOV [v_bla2], bl

!OR  al, bl
!MOV [v_bla3], al

Debug bla1
Debug bla2
Debug bla3
InlineASM:

Code: Alles auswählen

bla1.b = 0
bla2.b = 0
bla3.b = 0

MOV al, 0x05
MOV bl, 0x03

MOV bla1, al
MOV bla2, bl

OR  al, bl
MOV bla3, al

Debug bla1
Debug bla2
Debug bla3
ASM-OR macht also das gleiche wie in PB der binäre OR-Operator '|':

Code: Alles auswählen

Debug 3|5
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
zigapeda
Beiträge: 1753
Registriert: 06.03.2005 17:22
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von zigapeda »

Also erstmal danke.
zu dem inline ASM, das ist ja das problem, weil wenn ich nur OR am anfang stehen hab markiert die IDE von PB das OR als Basic schlüsselwort. deswegen hab ich das dann direkt zum asm geschickt.
Dass das Debug die register verändert erklärt einiges^^
Also danke, werds dann gleich mal testen...

[Edit]noch eine frage:
was bewirkt folgende zeile:

Code: Alles auswählen

OR al,al
die bringt dann doch eignetlich garnix oder?[/Edit]
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping <)
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

zigapeda hat geschrieben:[Edit]noch eine frage:
was bewirkt folgende zeile:

Code: Alles auswählen

OR al,al
die bringt dann doch eignetlich garnix oder?[/Edit]
Bringt nichts, d.h. der Inhalt von AL ist danach gleich.

Dabei werden aber die Flags gesetzt wenn das Ergebniss 0 ist.
Anstatt mit CMP auf 0 zu prüfen, prüft man auch gerne so und
kann danach springen.

Code: Alles auswählen

OR AL, AL
JZ target ; Jump if Zero - wenn AL 0 ist zu target springen
  ; mach irgendwas, wenn AL true ist
target:
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
zigapeda
Beiträge: 1753
Registriert: 06.03.2005 17:22
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von zigapeda »

aso, stimmt, genau nach dem unsinnigen OR befehl steht ein sprung...
Ok nochmal danke Danilo, ich glaub jetzt weiß ich alles^^
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping <)
Antworten