Assembly

Ez a téma lezárásra került a moderátor által. A lezárás oka: Lásd hozzászólásomban.
Címkék
Assembly
2017-12-30T09:48:32+01:00
2017-12-30T15:31:42+01:00
2022-08-10T22:35:30+02:00
Zsuzsa1
Sziasztok!

Beadandómban az alábbiakat kellene megoldani (előre is nagyon megköszönném a segítséget!:

Unit unit_4; // 

procedure Fgv4(VAL a:dword; VAL b:dword; RESULT x:dword; RESULT y:dword); @cdecl; @use EAX; @returns("EAX"); @external;

procedure Fgv4(VAL a:dword; VAL b:dword; RESULT x:dword; RESULT y:dword); @nodisplay;
begin Fgv4;
// x=(b#15_13 : a#17_3 : a#(b#N_1)_13 : b#13_1)#+32;
// y=(a#2_3 : b#17_15 : a#23_9)#-32;
//return (x | b)#T + ( y#(a#N_1)_7 : (a#19_19)#<5 )#-32

end Fgv4;

end unit_4;




Unit unit_3; 

procedure Fgv3(VAL i:int32; VAL j:uns16; VAL N:uns32; VAR tomb: int32); @cdecl; @use EAX; @returns("EAX"); @external;

procedure Fgv3(VAL i:int32; VAL j:uns16; VAL N:uns32; VAR tomb: int32); @nodisplay;
begin Fgv3;
// tomb[0]=(i+j)*22;
// for (k=1; k<N; k++) tomb[k]=(tomb[k-1]+j)/5-22+i;
// sum=0;
// for (k=0; k<N; k++) sum=sum+tomb[k]%(j+2);
// return sum;



end Fgv3;

end unit_3;





Unit unit_2; 

procedure Fgv2(VAL i:int32; VAL j:uns16; RESULT k:int32); @cdecl; @use EAX; @returns("EAX"); @external;

procedure Fgv2(VAL i:int32; VAL j:uns16; RESULT k:int32); @nodisplay;
begin Fgv2;
// k=(i+56-j)/(abs(j+i)+8) ; return  ((j*(j-1)) * (i-j)) % (j+7)*j+185;
Mutasd a teljes hozzászólást!

  • A prog.hu nem házifeladat-megoldó portál, de segíteni azért tudok:

    Nézd át az assembly előadáson készült jegyzetedet, és a feladatokat, amit gyakorlaton csináltatok. Ezek alapján már valamit csak kell tudnod önállóan írni.

    Ha van már valami önálló próbálkozásod, amivel problémád van, akkor itt a Tudástárban tudunk benne segíteni. Abban a problémában viszont, hogy "nem figyeltem eleget előadáson", nem tudunk segíteni, azt sokszor csak a kurzus megismétlésével lehet orvosolni.
    Mutasd a teljes hozzászólást!
  • Csak egy trükk!
    Írd meg C-ben, majd debuggerből írd ki a disassembly kódot és kész!
    Mutasd a teljes hozzászólást!
  • Mondjuk ebben az esetben (erdeklodes hianya) ez egy tipikus melléktantargy lesz, amit aztán az életben nem fog használni. Ilyen volt nekem pl a "Marketing ismeretek", "Humán erôforrás management", "Filozófia" és még sorolhatnám ezeket a töltelék ****ságokat informatika cimszo alatt. Emiatt a széles látókörû és következésképpen csekély mélységû oktatás miatt én kulonosen szeretem használni az 'informatológus' kifejezést 

    -------------------------------------------------------------------------------
    De hogy segítsek is! :D

    1. Mivel a feladatok hellyel kozzel gép által érthetô formában vannak megadva, eloszor lefordithatova kell azokat tenni:

    extern(C) int fgv2(int i, ushort j){ auto k=(i+56-j)/(abs(j+i)+8); return ((j*(j-1)) * (i-j)) % (j+7)*j+185; }
    (A nyelv nem lényeges, nekem nincsen olyan egzotikus pascal-om, szoval ez most D-ben van)

    2. Debugban meg kell allitani, es megnezni a disassemblert. Aztan Copy+Paste (Mert hát minek talljuk fel a kereket ujra es ujra, nemigaz? ;) *raises irony sign

    extern(C) int fgv2_asm(int i, ushort j) {asm{ push ESI; movzx ECX, j; mov EAX, i; sub EAX, ECX; lea EDX, [ECX-0x1]; lea ESI, [ECX+0x7]; imul EAX, ECX; imul EAX, EDX; cdq; idiv ESI; imul ECX, EDX; add ECX, 0xb9; mov EAX, ECX; pop ESI; }}
    megj: azokon a helyeken, ahol [ebp-akarmi] van, behelyettesitjuk a parameterek neveit (i, j), hogy ne legyen feltuno, mert senki sem hiszi el, hogy kivulrol tudjuk a calling conventiont :D
    3. lehet tesztelni az eredeti es az uj fuggvenyt, hogy ugyanugy mukodik-e.
    4. ...
    5. profit 

    (Ez amugy egy remekul optimizalt kod lett, hála az LLVM-nek. Pl. az i-j és a j-1 egyszerre hajtodik végre )
    Mutasd a teljes hozzászólást!
  • C#
    PHP
    JavaScript
    Java
    ...
    Beszedes topic megnevezes??!!!
    Mutasd a teljes hozzászólást!
  • Hali!

    1. Próbálj meg normális, a problémát jól körülíró címet adni a témádnak a jövőben.
    2. Ha megmutatod, hogy mivel próbálkoztál, meddig jutottál el (forráskódot mellékelve), hol, miben akadtál el, mi nem megy, röviden: megmutatod, hogy milyen erőfeszítést tettél a feladat(ok) megoldása érdekében, akkor szívesen segítenek itt, maradhat a téma. A Prog.hu nem házi/beadandó feladat-megoldó portál. 

    Mutasd a teljes hozzászólást!
Ez a téma lezárásra került a moderátor által. A lezárás oka: Lásd hozzászólásomban.
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
Címkék
abcd