C-ben az if az tulajdonképpen micsoda? Utasítás, függvény, vagy valami más?
Assemblyben maga a feltételvizsgálat egy CMP, az ágak meg feltétel nélküli (JMP) és feltételes (JE, JNE, JG, JGE, JL, JLE,...) ugróutasítások.
Egyébként ha szimplán csak lefordítod a c kódot (nem linkeled):
gcc -g -c akarmi.c
majd az objectfájlt kielemezteted:
objdump -d -M intel -S akarmi.o
láthatod, hogy hogyan dolgozik a fordító.
3: Ennél talán egyszerűbb, ha rögtön .asm kimenetet generáltat a fordítóval.
Amúgy, az IF egy utasítás, a haskellben is és a C-ben is. Meg minden más nyelvben.
Nem a haskell, hanem éppen a C volt az (pontosabban a nyelv alkotója), amely mindent függvényként definiált, de ez csak a szubrutinokra és a főprogramra volt igaz, önmagukban az utasításokra természetesen nem. Tehát, a C-ben nincs procedúra, nincs főprogram se, csak függvények, amelyek ha éppen nincs visszatérési értékük, akkor valójában igenis procedúrák, de hát, a hülye Ken T. - Dennis R. szerzőpáros úgy gondolta, hogy miért is ne szorozza meg a hülyeséget kettővel.
Az IF-ek gépi kódban tényleg feltételes jump-ok:
Jump if equal, vagy
Jump if Greater than,
Jump if Zero, stb.
De hát, mi mások is lennének?
a=3;
b=2;
IF a>b then b=b-1;
---------------------
0000 mov AX,3
0003 mov [0400],AX
0006 mov AX,2
0009 mov [0402],AX
000C mov AX,[0400]
000F psh AX
0010 mov AX,[0402]
0013 pop BX
0014 add BX,AX
0015 or AX,AX
0016 jz 0027
0019 mov AX,[0402]
001C psh AX
001D mov AX,1
0020 mov BX,AX
0021 pop AX
0022 sub BX,AX
0023 mov [0402],AX
0027 END.
További 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!