Zvlastny uvod main() – Assembler – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Zvlastny uvod main() – Assembler – Fórum – Programujte.comZvlastny uvod main() – Assembler – Fórum – Programujte.com

 

k
~ Anonymní uživatel
144 příspěvků
16. 8. 2007   #1
-
0
-

Zdravim, zacinam s asm spravil som maly programik a disasemblil som ho a neviem pochopit uvod main (prekladac gcc)
programik skompilovany s flagmy -c -O2 (s O2 je to omnoh citatelnejsie :) )



int b(int x ) {
return x + 1;
}

int main() {
int a = 1;
a +=b(1);
return a;
}

a disasm:


Disassembly of section .text:

00000000 <b>:
0: 55 push %ebp
1: 89 e5 mov %esp,%ebp
3: 8b 45 08 mov 0x8(%ebp),%eax
6: 5d pop %ebp
7: 83 c0 01 add $0x1,%eax
a: c3 ret
b: 90 nop
c: 8d 74 26 00 lea 0x0(%esi),%esi

00000010 <main>:
10: 8d 4c 24 04 lea 0x4(%esp),%ecx
14: 83 e4 f0 and $0xfffffff0,%esp
17: ff 71 fc pushl 0xfffffffc(%ecx)
1a: 55 push %ebp
1b: 89 e5 mov %esp,%ebp
1d: 51 push %ecx
1e: 83 ec 04 sub $0x4,%esp
21: c7 04 24 01 00 00 00 movl $0x1,(%esp)
28: e8 fc ff ff ff call 29 <main+0x19>
2d: 83 c4 04 add $0x4,%esp
30: 59 pop %ecx
31: 5d pop %ebp
32: 8d 61 fc lea 0xfffffffc(%ecx),%esp
35: 83 c0 01 add $0x1,%eax
38: c3 ret


No, a ja nedokazem pochopit na cu su dobre tie 1. tri riadky:
10: 8d 4c 24 04 lea 0x4(%esp),%ecx
14: 83 e4 f0 and $0xfffffff0,%esp
17: ff 71 fc pushl 0xfffffffc(%ecx)

p.s. je to tam aj bez optimalizacie (bez -O alebo -O0)
Diky moc.

Nahlásit jako SPAM
IP: ...–
vsman
~ Anonymní uživatel
8 příspěvků
23. 2. 2008   #2
-
0
-

To k : Kompilator jazyka C vklada do kodu specialnu proceduru na kontrolu pretecenia zasobniku. Tato procedura sa vykonava na zaciatku kazdej volanej funkcie. Potom, pred volanim nejakej funkcie kompilator uklada vsetky parametre funkcie do zasobnika a vo funkcii sa hodnoty tych parametrov zo zasobnika citaju. Zasobnik je bufer na rychle predavanie datovych hodnot a v ASM su na nu specialne instrukcie. Ale je zbytocne toto studovat. Pouzitie ASM v C nepotrebuje volat inu fukciu. ASM v C sluzi na zrychlenie nejakych specialnych rutin.
Vlozit ASM do C mozes takto:
void main()
{
int a = 123;

__asm {
mov eax, a
add eax, 200
mov a, eax
}

printf("a=%d\n", a);
}

ASM pricita do premennej 'a' hodnotu 200 a potom normalne s printf sa hodnota vypise...

Nahlásit jako SPAM
IP: 89.173.13.–
m-> 29
~ Anonymní uživatel
4 příspěvky
13. 2. 2009   #3
-
0
-

Skúšal som niečo takéto dať do C ale nefunguje to:

#include <stdlib.h>

#include <stdio.h>

int main(void) {

__asm {
mov eax, a
add eax, 200
mov a, eax
}

return 0;
}
Nemôže sa na to niekto pozrieť a povedať mi prečo? Vždy mi to vyhodí hlášku: syntax error before '{' token na riadku 6. Používam code::blocks a prekladám s parametrami -std=c99 -g -Wall -W -pedantic -O Moc by mi to pomohlo ak by mi nejaký geek poradil - dík

Nahlásit jako SPAM
IP: 147.229.208.–
tmi0
Věrný člen
13. 2. 2009   #4
-
0
-

pokud se nemylim tak codeblocks uziva gcc kompilatoru a tedy syntaxe stylu __asm__("..."), nikoliv __asm{ ... } coz je ala visual studio. navic gcc neuziva nasm ale AT&T, takze napr. misto mov by jsi mel miti movl a tak... koukni trebas semhle: http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html

Nahlásit jako SPAM
IP: 213.226.226.–
ksp.mff.cuni.cz -- doporučuje 5 z 0 přetečených bufferů!
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 176 hostů

Podobná vlákna

C++ (uvod) — založil silent

Chybí třída main — založil dragon124

Odchytenie premennej v main z Thread — založil Test556586

Could not find or load main class — založil 88nico88

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý