Instrukcje warunkowe w asm

Odpowiedz Nowy wątek
2004-12-28 11:49

Rejestracja: 16 lat temu

Ostatnio: 1 rok temu

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>


Pozostało 580 znaków

2004-12-28 12:09

Rejestracja: 15 lat temu

Ostatnio: 13 lat temu

0

Zainteresuj się instrukcją cmps.


Northern wind take my song up high
To the Hall of glory in the sky
So its gates shall greet me open wide
When my time has come to die

Pozostało 580 znaków

2004-12-28 12:48

Rejestracja: 16 lat temu

Ostatnio: 1 rok temu

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?


Pozostało 580 znaków

2004-12-28 12:54

Rejestracja: 16 lat temu

Ostatnio: 1 rok temu

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).


Pozostało 580 znaków

2004-12-28 15:29

Rejestracja: 16 lat temu

Ostatnio: 1 rok temu

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... ?<


Pozostało 580 znaków

2004-12-29 09:29

Rejestracja: 16 lat temu

Ostatnio: 1 rok temu

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;

Pozostało 580 znaków

2004-12-29 11:56

Rejestracja: 16 lat temu

Ostatnio: 1 rok temu

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


Pozostało 580 znaków

2004-12-29 12:03

Rejestracja: 16 lat temu

Ostatnio: 1 rok temu

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!!!

Pozostało 580 znaków

Odpowiedz

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

Robot: CCBot