HLA-ban kéne segítség, egyáltalán minek tanítják?
Sziasztok! Az alábbi programban kéne egy kis segítség. Sehogy sem adja vissza a helyes értéket.Előre is köszönöm!
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;
// return (x & b)#T + ( y#(a#N_1)_9 : (a#19_19)#<5 )#-32
MOV(x,EAX);
AND(b,EAX);
MOV(32,CH);
tukor:
ROL(1,ebx);
RCR(1,ebx);
DEC(CH);
jnz tukor;
MOV(a,EAX);
SUB(CL,CL);
MOV(32,CH);
ciklus_3:
ROR(1,EAX);
jnc tovabb3;
INC(CL);
tovabb3:
DEC(CH);
jnz ciklus_3;
ADD(9,CL);
MOV(y,EAX);
ROR(CL,EAX);
SHLD(9,EAX,EDI);
MOV(a,EAX);
ROL(5,EAX);
MOV(EAX,ECX);
SHL(5,EAX);
SHRD(5,ECX,EAX);
SHLD(19,EAX,EDI);
ADD(EDI,EBX);
MOV(EBX,EAX);
Az elején máris van egy hiba:
tukor:
ROL(1,ebx);
RCR(1,ebx);
DEC(CH);
jnz tukor;
Ezzel azt csinálod, hogy előbb balra forgatod az ebx-et, ezzel a legnagyobb helyi értékű bit a carry flagba megy, aztán onnan vissza is töltöd egy jobbra forgatással, így a végén nem is változik az ebx. Ezt hiába ismétled meg 32-szer, akkor sem változik. Vagyis egy másik regisztert kellene használnod az rcr-nél.
Egyébként azért tanítják, mert a legelemibb programozási nyelv, emiatt egyrészt a legegyszerűbb is, ugyanakkor viszont a legnehezebb is. De ha ez a válasz nem elégít ki, akkor akkor kérdezd meg Halászt.
Nem vagyok otthon benne, de ez biztosan high level assembly? Szerintem sima alacsony szintű assembly.
(?)
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!