Kezdőoldal » Számítástechnika » Programozás » 1 hla feladat megoldásában...

1 hla feladat megoldásában kérnék segítséget. Valakinek van valami ötlete erre?

Figyelt kérdés

procedure Fgv (VAR V1:int64; VAL V2:int32; RESULT R:int64); @external;

procedure Fgv (VAR V1:int64; VAL V2:32; RESULT R:int64);


R=V1-V2


Ezt a feladatot kellene megoldanom, de ötletem sincs, hogy hogy kéne megcsinálni.



2011. dec. 7. 18:16
 1/9 _Jessy_ ***** válasza:
Egy kivonást???
2011. dec. 7. 21:03
Hasznos számodra ez a válasz?
 2/9 A kérdező kommentje:
Igen. Mint látod, egy 64bites számból kell kivonni egy 32bitest, és az eredmény szintén 64bites. Mivel a regiszterek 32bitesek, ezért nem tudom, hogy hogyan kell elvégezni a kivonást.
2011. dec. 7. 22:02
 3/9 coopper ***** válasza:

Talán tipus erőltetéssel megy :


R:=V1-int64 (V2);


Sok sikert.

Üdv.

2011. dec. 8. 07:12
Hasznos számodra ez a válasz?
 4/9 _Jessy_ ***** válasza:

szerintem nem fog. Ha ilyen egyszerű lenne nem adták volna fel. :) Egy másik megoldás lehet, hogy aljas módon 64 bites programot írsz, és kivonod, vagy a másik az, hogy

V1 utolsó 4 bájtját regiszterbe rakod, V2-t is, aztán kivonod. Aztán megnézed a carry bitet. Ha 0 akkor V1 felső 4 bájtja után odabiggyeszted az eredményt, és megvagy, ha pedig 1 akkor kivonsz a felső 4 bájtból egyet, és az után rakod az eredményt.

2011. dec. 8. 08:34
Hasznos számodra ez a válasz?
 5/9 A kérdező kommentje:

Köszi az eddigi segítséget. Most ezt sikerült beírnom, viszont a tesztelő szerint hibás.


[link]


Valószínűleg én vagyok a vaksi, de nem látom a hibát.

Ötlet?

2011. dec. 8. 20:54
 6/9 _Jessy_ ***** válasza:
ecx-ből kell kivonnod ebx-et ha jól látom a problémát, és nincs tesztelve az sem, hogy az eredmény negatív lett-e, mert ekkor csökkenteni kell eax értékét, mielőtt visszaírnád az eredménybe. Azt még elfelejtettem odaírni, hogy ez csak pozitív számokra működik, és az eredmény is pozitív kell legyen, tehát 0-1 az kicsit bonyolultabb dolog...
2011. dec. 8. 21:55
Hasznos számodra ez a válasz?
 7/9 A kérdező kommentje:
A tesztelő szerint az összes megoldás negatív. Akkor ezzel a módszerrel ezt nem lehet kiszámolni?
2011. dec. 9. 11:03
 8/9 coopper ***** válasza:

Üdv.


Ird meg valamelyik magasszintű nyelven, majd próbáld meg debugolni.


Én megirtam Delphiben ezt lett az eredmény (11111-1111) :


MOV DWORD PTR DS:[444840],2B67

MOV DWORD PTR DS:[444844],0

MOV ECX,457

MOV EAX,DWORD PTR DS:[444840]

MOV EDX,DWORD PTR DS:[444844]

PUSH EDX

PUSH EAX

MOV EAX,ECX

CDQ

SUB DWORD PTR SS:[ESP],EAX

SBB DWORD PTR SS:[ESP+4],EDX

POP EAX

POP EDX

MOV DWORD PTR DS:[444848],EAX

MOV DWORD PTR DS:[44484C],EDX



Sok sikert.

Üdv.

2011. dec. 9. 12:30
Hasznos számodra ez a válasz?
 9/9 A kérdező kommentje:
Köszönöm szépen a válaszokat! Sikerült megoldanom, hibamentesen lefutott a program.:)
2011. dec. 13. 20:16

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!