Instrukcje warunkowe w asm

0

wiem ze dziwny temat, ale... No wlasnie mam sobie taki kod (prosze sie nie smiac, przedwczoraj zaczalem nauke asm :P):

const
v_='ABC';
var
s:string
begin
s:=edit1.text;
asm
mov EAX,s

No wlasnie... i chcialbym sprawdzac czy w EAX jest rowne stalej v_ ... I jak to zrobic? Wiem oczywiście że kod jest bez sensu i moglbym sprawdać z poziomu Delphi ale ja chce wiedziec jak sie to robi w asm. Bo jak robię .IF .ELSE .ENDIF to kompilator wywala błąd. Co robić? [sciana] </asm>

0

Zainteresuj się instrukcją cmps.

0

a moglbys podac jej użycie?
I jeszcze jedno... xor`owanie. gdy napisze xor x,y to gdzie jest zwracany wynik (do x czy y) i jesli napisze xor EAX,EBX to wynik w postaci 0 lub 1 trafi do rejestru 32 bitowego? Nie da sie inaczej?

0

I jeszcze jedno... xor`owanie. gdy napisze xor x,y to gdzie jest zwracany wynik (do x czy y)

do x, dlatego dozwolone jest np xor ax, 1

i jesli napisze xor EAX,EBX to wynik w postaci 0 lub 1 trafi do rejestru 32 bitowego?

[???]

W EAX bedzie wartosc EAX xor EBX (np 10b xor 1b , w EAX zostanie 11b).

0

Sorry myslalem wtedy o czyms innym :P po prostu nie mysalem nad tym co pisze :D thx :P

W EAX bedzie wartosc EAX xor EBX (np 10b xor 1b , w EAX zostanie 11b).

No właśnie ale jak w Delphi robię wstawki asm i na przykład chcę byte przypisać do EAX to kompilator wywala "Operation size mismatch" a do np. AH (lub AL) sie da więc wnioskuję że to ze wzgledu na rozmiary.Wiec dlaczego z poziomu asm mozna 11b przypisać do EAX, a z Delphi nie ?

I jeszcze jedno (bezczelnie wykorzystam :P):
Mam taki kod:

var
i1,i2,o:integer;
begin
i1:=5;
i2:=2;
asm
mov EAX,i1
mov EBX,i2
xor EAX,EBX
mov o,EAX
end;
caption:=inttostr(o);

i czemu jak go używam do wywala mi Acces Violation... ?<

0
var
i1,i2,o:integer;
begin
i1:=5;
i2:=2;
asm
mov EAX,i1
mov EBX,i2
xor EAX,EBX
mov o,EAX
end;
caption:=inttostr(o);

hmm tutaj zle widzi caption, zrob tak

form1.caption:=inttostr(o);

a co do drugiego problemu

var
  b: byte;
asm
  mov eax, cardinal(b);  //musimy miec ten sam rozmiar
  mov ebx, 11b         //tutaj kompilator sam se z tego zrobi 32bity (dopisze 0)
end;
0

Thx teraz dziala :D btw nie moge załapać czemu nie koajrzy caption z form1, skoro to jest w procedurze zadeklarowanej jako należąca do TForm1... I zazwyczaj działa, dopiero z tą wstawką ASM nie chodzi... No chyba ze jest mozliwe ze informacje o tym co w danym miejscu jest "self"`em czyli co obsługuje parametry bez zdefiniowanego odbiorcy (jak np. Button1.caption , caption etc. zamiast Form1.Button1.Caption, Form1.Caption etc.) jest przechowywana wlasnie w EAX, i jak zastępujemy to "gubi"... Jest tak czy nie? :P

0

Hehe miałem racje, coś ważnego jest w EBX(pewno odwołanie do form1 jako "self"a) zrobiłem tak:

var
i1,i2,o:integer;
orgEAX,orgEBX:integer;
begin
i1:=5;
i2:=2;
asm
mov orgEAX,EAX
mov orgEBX,EBX
mov EAX,i1
mov EBX,i2
xor EAX,EBX
mov o,EAX
mov EAX,orgEAX
mov EBX,orgEBX
<delphi> end; caption:=inttostr(o);

i tym razem po przywróceniu wartości EBX i EAX działa bez form1.caption, wystarcza samo caption!!!

1 użytkowników online, w tym zalogowanych: 0, gości: 1