Pomoć oko koda!

poruka: 5
|
čitano: 1.497
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
12 godina
neaktivan
offline
Pomoć oko koda!

Ovako sto se tice koda može neko kratko objašnjenje/opis ,što radi itd.
Znat ce ovi koji se bave C/C++
Unaprijed puno hvala i bez nekih prepucavanja kao npr: ovo je lagano ,ovako onako
Samo trazim da neko objasni ako nije problem. {#}

// for x8086 32 bit processor
#include <stdio.h>

char ft[] = "%s\n";
char play[] = "I play guitar";
int main( void )
{
__asm
{
mov eax, offset play
push eax
mov eax, offset ft
push eax
call printf
add esp,8
}
}


Eto ga {#}

Poruka je uređivana zadnji put čet 4.10.2012 17:05 (Stux).
 
0 0 hvala 0
14 godina
neaktivan
offline
Pomoć oko koda!

ovo ti je assembler i c++

Moj PC  
0 0 hvala 0
14 godina
offline
Re: Pomoć oko koda!
zero.O kaže...

ovo ti je assembler i c++

Po čemu je ovo c++? Koliko ja vidim ovo je čisti c, sa assamblerom.

I would love to change the world, but they won't give me the source code
14 godina
neaktivan
offline
Re: Pomoć oko koda!

C kod ti neću objašnjavati, samo assembly. Ukratko, to što vidiš pred sobom je način za pozivanje funkcije printf iz x86 assemblyja. Pa krenimo:

 

mov eax, offset play

Memorijsku adresu varijable "play" prebaci u eax registar.

 

push eax

Sadržaj eax registra stavi na stack.

 

mov eax, offset ft

Memorijsku adresu varijable "ft" prebaci u eax registar.

 

push eax

Sadržaj eax registra stavi na stack.

 

call printf

Pozovi funkciju "printf"

 

add esp,8

Zbroji vrijednost esp registra sa brojem 8 i rezultat pohrani u esp registar. Taj je registar zadužen za praćenje trenutne pozicije na stacku (stack pointer), tako da je ovo u biti vraćanje stack pointera u stanje u kojem je bio prije ova dva pusha (32 bitni broj je 4 bajta u memoriji, dva puta je pushano na stack - znači treba se vratiti za 8 bajta unatrag).

 

Za detalje prouči ovo.

 

 

P.S.

 

[RANT]

Ova izjava:

// for x8086 32 bit processor

Je glupost teških razmjera. 8086 je konkretan model iz linije x86 procesora, i radi se o 16 bitnom procesoru, a "x" u "x86" služi kao zamjenski znak jer su modeli išli: 8086, 80186, 80286, 80386, 80486...  pa se jednostavno stavio "x" na znamenku koja se mijenjala i tako je nastao "x86". Staviti "x" ispred punog broja modela procesora samo pokazuje da netko tko je to pisao nije razmišljao previše...

 

Iz istog je razloga i posebna vrsta gluposti pisati x64 za 64 bitne procesore (umjesto x86-64), jer ne postoji arhitektura kodnog imena x64, ali što ćeš kad marketing tjera svoje.

[/RANT]

Oscar-Mike-Golf Whiskey-Tango-Foxtrot
Poruka je uređivana zadnji put čet 4.10.2012 18:26 (rustweaver).
12 godina
neaktivan
offline
Re: Pomoć oko koda!

Puno hvala! {#}

”Learn how to protect your wireless network, by first learning how to break it.”
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice