Kezdőoldal » Számítástechnika » Programozás » A programozáshoz mennyire...

A programozáshoz mennyire kell matek?

Figyelt kérdés
2021. okt. 20. 23:25
1 2 3 4 5 6
 51/54 anonim ***** válasza:
53%

-Anasm


vagy


-Anasmwin32

2021. okt. 23. 13:33
Hasznos számodra ez a válasz?
 52/54 anonim ***** válasza:
72%

k := 56;

k := (K div 2);


push ebp

mov ebp,esp

mov word [U_$P$PROGRAM_$$_K],56

movsx eax,word [U_$P$PROGRAM_$$_K]

mov edx,eax

shr edx,31

add eax,edx

sar eax,1

mov word [U_$P$PROGRAM_$$_K],ax

call fpc_do_exit

mov esp,ebp

pop ebp

ret

-------------


K := 56;

K := K >> 1;


push ebp

mov ebp,esp

mov word [U_$P$PROGRAM_$$_K],56

movsx eax,word [U_$P$PROGRAM_$$_K]

shr eax,1

mov word [U_$P$PROGRAM_$$_K],ax

call fpc_do_exit

mov esp,ebp

pop ebp

ret


Jól látható, hogy a fordító eloptimalizálta a szorzást. Kicserélte a hatékonyabb SHR-re, de még így is rövidebb a SHIFT-es (ez az alsó) megoldás.

2021. okt. 23. 13:52
Hasznos számodra ez a válasz?
 53/54 anonim ***** válasza:
58%
Köszi. Én nem boldogultam vele, külsőd isassembler-t akart volna meghívni a fordító.
2021. okt. 23. 16:44
Hasznos számodra ez a válasz?
 54/54 anonim ***** válasza:
72%

fpc -O- -ANasm forditando.pas


Az első paraméter az optimalizációs szint. Ez a - jellel nulla.

A második paraméter az -A ami assembly kimenetet generál, ez után azt kell megadni, hogy milyen assembly forrást köpjön ki a fordító. A Nasm a Netwide assemblere, amúgy alapban AT&T lesz, legalábbis, ha jól emlékszem.


A fordító opcióit elolvashatod így:

fpc -h > kimenet.txt


Ez generál egy kimenet.txt nevű file-t amiben ott lesz minden fordítási direktíva, amit használni lehet, egy sornyi rövid magyarázattal.

Elég sokat tud az FP fordítója, ezt jelzi az is, hogy az instant helpje is több mint 16 kB.



Az időmérésed azért nem jó, mert a processz saját ideje kell, nem az eltelt idő. Utóbbiban benne van az összes futó program által elhasznált idő. A win is a linux is multitaszt opre, ez azt jelenti, hogy egy időben fut sok processz és az ütemező másodpercenként (!) 50-100 alkalommal osztja ki az időszeleteket, tehát az eltelt idő neked nem lesz jó.

De ilyen dolognél nem is kell időt mérni, pláne úgy nem ,ahogy tetted, elég a generált asm listából kinézni az alkalmazott utasításokat és a táblázatból kinézni a hozzájuk rendelt ciklust. Az SHR/SHL amúgy fél ciklus, a "rendes" osztás meg attól függ, hogy mit osztasz mivel, lehet akár 150 ciklus is, tehát szélsőséges esetben akár 300-szor (de legalább 80-szor) gyorsabb lehet a bit shiftelés a valódi osztásnál.

2021. okt. 23. 17:03
Hasznos számodra ez a válasz?
1 2 3 4 5 6

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!