» »

Kako deluje strojna koda?

Kako deluje strojna koda?

Reliant2 ::

Lep pozdrav!

Kako deluje stronja koda.. oziroma ali je mogoče prevesti binarno.. ali bilokakršno obliko v strojno kodo (exe)...?

Je morda mogoče kakšna dobra spletna stran o tem?

Lep pozdrav!
reliant

OwcA ::

Googlaj za "disassembler".
Otroška radovednost - gonilo napredka.

y00r3 ::

Mensezdi da je binarna koda = strojna koda:\

Reliant2 ::

se pravi, prevest binarno kodo v executable

snow ::

Procesorji direktno izvajajo strojno kodo = binarno kodo. Na najnižjem nivoju deluje vse z 1 in 0.

Ko nekdo piše kodo v asemblerju, dejansko piše strojno kodo, ampak razlika je zgolj kozmetična. Namesto števil se pišejo 'besede'. Najdeš jih tukaj oziroma, še boljše tu pa tu.
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

snow ::

Aja seveda pa imaš različne arhitekture in vsaka ima svojo binarno kodo.
Prevesti binarno kodo v .exe? Predvidevam da gre za x86 (intel, amd).

Kodo vpišeš v en c++ array in poženeš prek function pointerja (nekaj takega):
#include <cstdio>
#include <cstdlib>

typedef long  (__attribute__((fastcall)) *  DYNAMIC_ADD)(unsigned long v, unsigned long v2);

int main(int argc, char* argv[])
{
	DYNAMIC_ADD dyn_add =  (DYNAMIC_ADD) new char[5];

	((char*)dyn_add)[0] = 0x03; //add ecx,edx
	((char*)dyn_add)[1] = 0xCA;

	((char*)dyn_add)[2] = 0x8B; //mov eax,ecx
	((char*)dyn_add)[3] = 0xC1;

	((char*)dyn_add)[4] = 0xC3; //ret
    
    unsigned long v= dyn_add(25,25);

	delete [] (char*) dyn_add;
	printf("g:%d\n",v,g);
	system("pause");
	return 0;
}
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

zerox ::

Med strojno kodo ter ničlami in enkami je pa še mikrokoda i guess:\

jype ::

zerox> Med strojno kodo ter ničlami in enkami je pa še mikrokoda i guess

Ja, vedno bolj. To je dobro.

snow ::

> Med strojno kodo ter ničlami in enkami je pa še mikrokoda i guess

V x86 je ja. In je zapisana v romu procesorja se mi zdi?
Ampak kakšnih datasheetov glede tega pa ne najdeš nikjer!
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

zerox ::

Se bo treba zaposlit pri kakem izdelovalcu procesorjev v razvojnem oddelku :) tam jih bo kot smetja in trave [datasheetov].

Ja sem zdaj malo googlal na hitro pa je res glede tega bore malo informacij. Me pa zanima kako je z x86 in novejšimi družinami cisc procesorjev, če bo kdo našel kakšen uporaben link se priporočam.

What about this?

Gundolf ::

> Me pa zanima kako je z x86 in novejšimi družinami cisc procesorjev, če bo kdo našel kakšen uporaben link se priporočam.
Če se ne motim so to CISC le še na zunaj, v resnici so le mikrokodirani SISC procesorji. Tako na grobo in iz glave.

DavidJ ::

> Med strojno kodo ter ničlami in enkami je pa še mikrokoda i guess

Pravzaprav, lahko ja, lahko ne. Odvisno od arhitekturne zasnove. Če je procesor zasnovan kot mikroprogramski, potem se binarna koda, torej tista, ki jo CPE jemlje iz pomnilnika in izvršuje, spreminja v dolgo zaporedje bitov (50 ali celo več), ki krmilijo kontrolno enoto procesorja. V tem primeru je kontrolna enota znotraj CPE zasnovana kot samostojni, majhen, primitiven računalnik. To dolgo zaporedje bitov določa, kateri (kontrolni) signali so aktivirani in s tem krmili podatkovno enoto.

Nasprotje mikroprogramski je trdo ožičena kontrolna enota, ki je v zadnjem času, ko je na pohodu družina RISC računalnikov, bolj v modi. Tu pa je kontrola enota zgrajena iz veliko (res veliko) enostavnih vrat in flip-flopov. Mikroprogramov tukaj ni. Ukaz, ki se prebere v ukazni register, se neposredno dekodira in prižgejo se signali, ki krmilijo podatkovno enoto. Prednosti trdo ožičene KE so v hitrosti. Mikroprogramske KE so sicer lažje za spreminjanje in omogočajo celo, da je procesor na strojnem nivoju sposoben simulirati, da deluje kot drug procesor, kar so pri IBM-u poimenovali emulacija.
"Do, or do not. There is no 'try'. "
- Yoda ('The Empire Strikes Back')

Zgodovina sprememb…

  • spremenil: DavidJ ()

DavidJ ::

> binarna koda = strojna koda

Ja, če je kontrolna enota trdo-ožičena. Sicer se pa še preslika v mikroukaze, vendar sta obe vrsti ukazov, mikro in navadni ukazi, strojni ukazi.

Tudi ko kodiraš v zbirnem jeziku in uproabljaš mnemonike pišeš strojno kodo. Edina transformacija med tistimi znaki, ki jih vpisuješ in strojno kodo, je neke vrste search&replace, ki ga opravi prevajalnik. Tako npr ukaz ADD R1, R2, R3 zamenja z ustreznim zaporedjem bitom.
"Do, or do not. There is no 'try'. "
- Yoda ('The Empire Strikes Back')

DavidJ ::

> Če se ne motim so to CISC le še na zunaj, v resnici so le mikrokodirani SISC procesorji.
SISC? Misliš RISC?
"Do, or do not. There is no 'try'. "
- Yoda ('The Empire Strikes Back')

Matako ::

> Če se ne motim so to CISC le še na zunaj, v resnici so le mikrokodirani SISC procesorji.


Hm povezava tukaj je zelo, zelo medla ...

Kot je znano, razlika ni bila nikoli preveč jasna. Recimo ve se, da je so bili VAXi pojem CISC, medtem ko je bila kaka MC88000 (mikrokodiran procesor) zelo RISC. Samo, ali so recimo PowerPC res RISC, kot pravijo brošure? In zakaj je večina procesorjev mikorokodiranih ne gelede na to, ali so RISC ali CISC?

Odgovor na vse to je zelo dolga in včasih malo žalostna zgodba, ki pa ima zelo jasno moralo: nikoli se ne zanašajte na to, da imajo marketinške kratice kak dejanski smisel ;)

Najbolj znani ne mikrokodirani procesorji so verjetno legende 8-bitne dobe. Recimo kaka MC6800 (dve nuli) - zanimivo, ta procesor bi po povprečju vseh teh zmedenih definicij tudi bolj kot ne RISC.

Tukaj vidim vir vse te dileme - enostavni ne-mikrokodirani procesorji so zelo RISCy - ampak to je enostavno posledica, da si brez mikrokodiranja enostavno omejen na osnove (čemur daje prednost RISC pristop), kompleksnejši dizajni (čemur daje prednost CISC) so težko izvedljivi.

Posledica je, da danes praktično noben procesor ni več "trdo ožičen" ne glede na kaj ga imenujemo. Enostavno so prezapleteni za kaj takega, poleg tega je mikrokodiranje tudi bistveno enostavnejše za razvoj, fleksibilnejše in cenejše.
/\/\.K.

Zgodovina sprememb…

  • spremenil: Matako ()

Matako ::

Moja definicija: strojna koda je program sestavljen iz nabora ukazov, ki se izvajajo neposredno z procesorjevim naslavljanjem pomnilnika.

Po domače, procesor štarta, vzame prvi ukaz "v strojni kodi", ga izvede in ponavlja zgodbo...

S strojno kodo je zelo povezana kratica ISA - Instruction Set Architecture. To je tisto, kar programer na zunaj vidi kot "procesor" - vrsta in število registrov, načini naslavljanja, katere ukaze ima in katere učinke imajo. Definitivno veliko pokrivanja med tema dvema pojmoma.

Tukaj je treba potem omeniti še popularno frazo "program v asemblerju" ali samo "asembler". To je sicer napačna uporaba izraza asembler (zbirnik), ki če smo natančni, pomeni program, ki prevede mnemoničen zapis programa v strojni kodi v dejansko strojno kodo. Samo folk, ki "programira v zbirniku" itak ve za kaj gre, ostalim pa kao nima smisla razlagati - interna fora, skratka.

Glede "enk in enic" ... Lepo vas prosim! Tto je slo-tech, ne mi s takimi ;)
/\/\.K.

Zgodovina sprememb…

  • spremenil: Matako ()

Gundolf ::

DavidJ: ja RISC, Reduced sem zamenjal s Simplified :8)

WarpedGone ::

Kako deluje strojna koda?


Napačno vprašanje.
Hotu si uprašat "Kako deluje procesor".
Strojna koda je jezik procesorja, v katerem so pisani programi, ki jih razume. Noben kratek odgovor ti na to vprašanje ne bo zadovoljivo odgovoril, zato google.
Zbogom in hvala za vse ribe

Zheegec ::

Če se ne motim so to CISC le še na zunaj, v resnici so le mikrokodirani SISC procesorji. Tako na grobo in iz glave.

Ja, CISC x86 koda se razbije na majhno RISC mikro kodo (uOps imenuje to Intel se mi zdi) in to vse zaradi "kompatibilnosti". Že prehod iz x86 na x86-64 je izredno dolg (čeprav sta AMD & M$ obljubljala precej hitrejšega), pa gre za popolnoma backwards-kompatibilno zadevo (seveda z izjemo driverjev), razni "pravi" RISC procesorji (ala Intel Itanium) pa so žalostno propadli samo zaradi tega ker je treba x86 emulirati in so pri tem seveda počasni.
"božja zapoved pravi; <Spoštuj očeta in mater>,
ne govori pa o spoštovanju sodstva."
Janez Janša, 29.04.2014


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Prvi programski jezik (kako je deloval)?

Oddelek: Programiranje
165622 (4854) noraguta
»

30 let x86 arhitekture (strani: 1 2 3 4 5 )

Oddelek: Novice / Kiberpipa
22522741 (11198) BigWhale
»

Ušle specifikacije za Intel Medfield

Oddelek: Novice / Procesorji
3610604 (8683) gendale
»

Windows 8 za ARM ne bo podpiral starih programov

Oddelek: Novice / Operacijski sistemi
4011810 (9772) driver_x
»

Tridesetletnica arhitekture x86

Oddelek: Novice / Procesorji
285261 (3917) driver_x

Več podobnih tem