hema80Medlem sedan sep. 2004137 inlägg Som rubriken lyder - hur ser maskinkod ut? Vad är maskinkod? Är det två tecken (kanske 1 och 0) på rad vilket maskineriet i burken omvandlar till elektriska signaler?
Tex Assemblerkod är väl inte maskinkod? Assemblerkod måste väl kompileras till maskinkod? Dock är Assembler, vad jag förstår, närmare maskinkod i sin stil och går därför fort att kompilera, fortare än ett högnivåspråk tex C.
Hur fungerar det?
tydalMedlem sedan juni 20034 013 inlägg Ja, maskinkod är ettor och nollor. Assemblerkod är nästan maskinkod. Man kan säga att assembler är maskinkod översatt så den blir lättare att förstå för människor.
Om vi tittar på två nonsensrader i assembler:
MOV EAX, 12345678h
MOV ECX, 87654321h
EAC och ECX är två lagringsplatser (register) i processorn. Instruktionen (kommandot) MOV tar det som står till höger och lägger det i minnesplatsen som står till vänster. 12345678 är ett tal och h på slutet betyder att det är angivet i hex. Så instruktionerna sätter alltså registret EAX till 12345678 (hex) och ECX till 87654321 (hex).
I maskinkod ser det ut så här:
66 B8 78 56 34 12 66 B9 21 43 65 87
Notera att vi har "78 56 34 12" och "21 43 65 87". Det är de två tal vi ville lagra. Jag använder i det här fallet en intel-processor och de kör med little endian, dvs att den lägsta delen av talet lagras först, dvs baklänges. Därför sparas 12 34 56 78 som 78 56 34 12. Notera att två hexadecimala siffror utgör en byte, och en byte är ju en enhet, så därför hamnar siffrorna i grupper om två.
Vi tittar vidare... i maskinkoden står 66 B8, följt av vårt tal och sedan 66 B9 följt av vårt andra tal.
66 betyder alltså MOV och B8 är EAX medan B9 är ECX.
Så assembler är i mångt och mycket bara ett snyggare (lättare att läsa) sätt att skriva maskinkod.
PeWMedlem sedan juni 200010 432 inlägg
MOV tar det som står till höger och lägger det i minnesplatsen som står till vänster.
Inte helt korrekt då det skiljer sig på vilken plattform man använder. I exempelvis Motorola-assembler läggs det som står till vänster till det som står till höger. ;)
tydalMedlem sedan juni 20034 013 inlägg Men så lagrar ju Motor-Ola talen i omvänd ordning också.
hema80Medlem sedan sep. 2004137 inlägg Ok men det står i hex och inte i binär form, right. Du sa att maskinkod var ettor och nollor ...
UlfTMedlem sedan maj 20018 027 inlägg
hema80 skrev:
Ok men det står i hex och inte i binär form, right. Du sa att maskinkod var ettor och nollor ...
Det är ju bara för att det är praktiskt att representera talen i hex-format. Det blir lite svårt att läsa sekvenser i stil med "1101100010110010111".
tydalMedlem sedan juni 20034 013 inlägg Allting är ettor och nollor, (även text, bilder, ljud och dokument) men när det gäller maskinkod är det lättare att läsa om man skriver det i hex istället, så därför gör man i allmänhet det.