Kezdőoldal » Számítástechnika » Programozás » Segitség High level assembly-ben?

Segitség High level assembly-ben?

Figyelt kérdés

procedure Fgv1(VAL i:int32; VAL j:int16); @cdecl; @use EAX; @returns("EAX"); @external;


procedure Fgv1(VAL i:int32; VAL j:int16); @nodisplay;

VAR r:int32;

begin Fgv1;

// return (((66 * i) + 109) * ((i + (19 * i)) * (j + i)));


push(eax); push(ebx);

mov(i, eax);

intmul(66, eax);

add(106, eax);

mov(i, ebx);

intmul(19, ebx);

add(i, ebx);

mov(ebx, r);

movsx(j, ebx);

add(i, ebx);

intmul(r, ebx);

intmul(ebx, eax);

pop(ebx); pop(eax);


end Fgv1;


end unit_1;



1. teszt eset ( i= 457830, j= 348 ): eredmény: 348, helyes: 1407829616

2. teszt eset ( i= 457830, j= 913 ): eredmény: 913, helyes: 571313160

3. teszt eset ( i= 457830, j= 3475 ): eredmény: 3475, helyes: 518160504

4. teszt eset ( i= 457830, j= 8948 ): eredmény: 8948, helyes: -1556787280

5. teszt eset ( i= 457830, j= 29684 ): eredmény: 29684, helyes: -246872144

Bármit csinálok a végeredmény mindig egyenlő j-vel. A végeredmény miért egyenlő mindig j-vel?



2014. nov. 20. 17:44
 1/10 Reiber Péter ***** válasza:
100%

Hát aszondod a fordítónak ,hogy returns eax, tehát eax a visszatérőm, majd az elején a gondosen verembe elmebtett EAX-edet visszaszed pop(eax)-al...


De kicsit utánaolvastam ennek az életellenes highlevel asm katasztrófának, és aszongya egy főiskolai könyvben valami nagyokos, hogy a "use eax" akkor adható ki, ha nincs benne átadott vagy visszatérő paraméter, tehát használd csak, nekem nem kell.


Itt meg közben returns eax tehát az a visszatérőm.


Gyanitom egyfajta véletlen hogy a 2. bemenő paramétert kapod vissza pont, egyszerűen regiszter értékmaradvány okozza, a hívás előtt a fordító az EAX-ben hagyta a paraméter értékét valamilyen szintetizált kód eredményeként, te meg szépen elteszed majd visszaszeded.


(az elmentett "szemetet" ami véletlenül benne volt.


Ez igy biztosan nem jó.


Nemtudom mi a cél, ha lehet returns ax, akkor ax-re nem kell vigyázni, hisz ha benne kérek visszatérőt ez lehetetlen..


Viszont igazi magas szintű programnyelvben meg illik mindenre vigyázni, nem a fordító dolga mindent levermelni vagyis semminek az értékében nem bízni egy hívás után, ott jó ez a push midnenség, pop indenség, de ez nyilván üti a regiszter szintű paraméterátadást.


Sima assemblyben mi uraljuk a regisztereket, mi dolgunk figyelni, tiszta sor, minden kód a mienk, ha eltoljuk magunk csesztük el.


Ezt a high level asm izémizét ezt ezért (sem) értem, koncepciójában sem.

2014. nov. 20. 18:21
Hasznos számodra ez a válasz?
 2/10 anonim ***** válasza:

procedure Fgv1(VAL i:int32; VAL j:int16); @cdecl; @use EAX; @returns("EAX"); @external;


procedure Fgv1(VAL i:int32; VAL j:int16); @nodisplay;

VAR r:int32;

begin Fgv1;

˙˙˙˙// return (((66 * i) + 109) * ((i + (19 * i)) * (j + i)));

˙˙˙˙PUSH(EAX);

˙˙˙˙PUSH(EBX);

˙˙˙˙PUSH(ECX);

˙˙˙˙PUSH(EDX);

˙˙˙˙

˙˙˙˙//EAX = (66 * i) + 109

˙˙˙˙MOV(i, EAX);

˙˙˙˙INTMUL(66, EAX);

˙˙˙˙ADD(106, EAX);

˙˙˙˙

˙˙˙˙//EBX = i + (19 * i)

˙˙˙˙//ECX = i

˙˙˙˙MOV(i, EBX);

˙˙˙˙INTMUL(19, EBX);

˙˙˙˙MOV(i, ECX);

˙˙˙˙ADD(ECX, EBX);

˙˙˙˙

˙˙˙˙//EDX = (j + i)

˙˙˙˙MOVSX(j, EDX);

˙˙˙˙ADD(ECX, EDX);

˙˙˙˙

˙˙˙˙//EAX = (((66 * i) + 109) * ((i + (19 * i)) * (j + i)))

˙˙˙˙INTMUL(EBX, EDX);

˙˙˙˙INTMUL(EDX, EAX);

˙˙˙˙

˙˙˙˙POP(EDX);

˙˙˙˙POP(ECX);

˙˙˙˙POP(EBX);

˙˙˙˙POP(EAX);

end Fgv1;


Mondjuk, ha EAX-ba kell eredmény, azt lehet, nem kell POP-olni a veremből...

2014. nov. 20. 22:14
Hasznos számodra ez a válasz?
 3/10 anonim válasza:
Vevé
2014. nov. 20. 22:20
Hasznos számodra ez a válasz?
 4/10 anonim válasza:

ezt hogy is kéne ?????? : procedure Fgv5 (V1:int32 in EBX; V2:int32 in EAX; mask:int32); @external;

procedure Fgv5 (V1:int32 in EBX; V2:int32 in EAX; mask:int32);

Begin Fgv5;//(V1 ÉS V2) bitjeivel felülírja V2-bitjeit, ahol a mask-ban 1-es bit van


End Fgv5;

2014. nov. 20. 22:37
Hasznos számodra ez a válasz?
 5/10 Grea válasza:
megcsináljátok az én házimat is?
2014. nov. 21. 22:23
Hasznos számodra ez a válasz?
 6/10 anonim válasza:
Harkály csináld meg magadnak.
2014. nov. 21. 22:58
Hasznos számodra ez a válasz?
 7/10 Grea válasza:

én csak kértem legalább nem megyek el odáig hogy mástól kérem... :D

plusz én majd dec 31.-én küldöm be.

2014. nov. 21. 23:21
Hasznos számodra ez a válasz?
 8/10 Grea válasza:
poénból írtam*
2014. nov. 21. 23:28
Hasznos számodra ez a válasz?
 9/10 anonim ***** válasza:

Ki a f.om az a Halász Gábor! Mi köze volt itt a dolgokhoz.

Azt se tudja, hogy beadandóról van-e szó, vagy egy hobby projectről, vagy gyakorlásról!!

De nagy magyar módjára mindjárt kitalálja, hogy mi a tuti, ugye??!!! >(


// Halász Gábor := ismeretlen idegesítő nyámnyila stréber //

2014. nov. 29. 14:11
Hasznos számodra ez a válasz?
 10/10 anonim ***** válasza:

#12: Valószínűleg a tárgy előadója...


[link]

2014. nov. 29. 15:01
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!