Sida 1 av 2
Maskinkod i processorer
Postat: 7 februari 2007, 14:11:03
av net4all
När man programmerar tex. en PIC processor lagras programmet i processorns minne.
Man lägger i så kallad hex-kod i minnet.
I vanliga datorer ligger koden på tex hårdisk, laddas in i RAM, processorn får adressen till rätt minnes plats i RAM och sist kör processorn koden.
Funderar lite på hur man skulle kunna få fram rena maskininstruktioner och köra dom.
När man komplierar ett program i tex C blir ju programmet platforsberoende ELLER?
Postat: 7 februari 2007, 15:53:59
av RasmusB
Datorn kör alltid rena maskininstruktioner, oavsett om det är en MAC, PC eller PIC.
Det som ligger närmast "rena maskininstruktioner" och som är intressant att använda är assembler, där motsvarar varje kommando (oftast) en instruktion till processorn. Vill du se hur ett program på en pc arbetar kan du ladda hem en disassembler som översätter ett kompilerat program (maskinkod) till assemblerinstruktioner.
Och ja, när du kompilerar ett c-program för en viss processor så översätts din c-kod till maskinkod för just den processorn och blir därmed plattformsspecifik.
Så om du vill "kunna få fram rena maskininstruktioner och köra dom" så är det mest realistiska alternativet att skriva assemblerkod för den plattform det gäller.
Postat: 7 februari 2007, 16:35:02
av sodjan
> Man lägger i så kallad hex-kod i minnet.
Notera att "HEX-kod" bara är ett sätt att *koda* rena binära maskininstruktioner
på ett sätt som gör att man kan lagra dom i en text-fil (d.v.s med
enbart "skrivbara" tecken), d.v.s i en HEX-fil.
Men fortfarande är det som ligger i HEX-filen ingenting annan än maskinkod
(samt eventuellt lite "data" för EEPROM och CONFIG bitar).
> Funderar lite på hur man skulle kunna få fram rena maskininstruktioner och köra dom.
Till vadå ? PC eller PIC ?
Till en PIC kan du använda vad som helst, alla "språk" genererar till slut
maskinkod. Vill du ha max kontroll så ligger (som RasmusB helt korrekt
sa) assembler närmast den färdiga maskinkoden.
I databladets kapitel med "Instruktion Set" ser du *exakt* hur varje
assemblerinstruktion kodas som maskinkod bit-för-bit.
Så den som vill kan alltså skriva färdig maskinkod direkt med hjälp av
informationen i databladet och strunta i assemblers och sånt larv...

Postat: 7 februari 2007, 17:12:20
av net4all
Om det är som ni säger varför blir programmen begränsade till ett operativsystem?
Man kör ju med samma processor.
edit: Programmen går givetvis inte att flytta mellan tex en RISC och en CISC processor.
Postat: 7 februari 2007, 17:14:11
av sodjan
Därför att "programmen" gör anrop till operativsystemet för en massa
triviala saker. De anropen är (näsan alltid) specifika för resp OS.
Eller vad är det du frågar om igentligen ???
Postat: 7 februari 2007, 17:17:29
av net4all
Funderar lite smått på eget OS...
(kanske skulle haft det som rubrik...)
Edit: Grejen är den att jag vill kunna ge processorn direkta instruktioner och var hittar jag en enkel disassembler?
Postat: 7 februari 2007, 17:19:59
av eriikh
Då har du nog att göra några år framöver, om det är till en pc du menar...
/Erik
Postat: 7 februari 2007, 17:24:12
av Mupp
Isf skulle jag vilja slå ett slag för en god bok i ämnet, tex Modern Operating Systems av Tanenbaum. Den går främst igenom hur lite större OS är uppbyggda. Då jag gissar att du kanske inte vill (eller ens bör) börja med ett OS till motsvarande persondatorer så slår jag även ett slag för google. Många OS till enchipsdatorer finns ju källkoden tillgänglig att lära sig av, men jag skulle nog rösta för att du skaffar nån slags grund i hur tankegångarna går i dom flesta OS.
Postat: 7 februari 2007, 17:48:49
av sodjan
> Funderar lite smått på eget OS...
Till vilken HW plattform ?
> och var hittar jag en enkel disassembler?
Till vilken arkitektur ?
(Och varför behöver du det ? Du skulle väl skriva *ny* kod...)
Nåväl, du har nog inte riktigt grepp över (än) vad du tänker ge dig in på...

Postat: 7 februari 2007, 18:21:26
av net4all
Ok, jag hittade en disassembler och testade på ett enkelt litet program och det blev ju massor med kod!
OS planerna hamnade kort sagt i papperskorgen.
Fortsätter istället med microprocessorer...
Postat: 7 februari 2007, 18:30:01
av sodjan
> och det blev ju massor med kod
Och dessutom tämligen oläslig kod eftersom du saknar
alla variabelnamn, labels o.s.v o.s.v....
Postat: 7 februari 2007, 18:38:15
av gvs
Mupp skrev:Isf skulle jag vilja slå ett slag för en god bok i ämnet, tex Modern Operating Systems av Tanenbaum. Den går främst igenom hur lite större OS är uppbyggda. Då jag gissar att du kanske inte vill (eller ens bör) börja med ett OS till motsvarande persondatorer så slår jag även ett slag för google. Många OS till enchipsdatorer finns ju källkoden tillgänglig att lära sig av, men jag skulle nog rösta för att du skaffar nån slags grund i hur tankegångarna går i dom flesta OS.
Dinosaurieboken! den är grym....
Postat: 7 februari 2007, 18:39:26
av net4all
Tämligen oläslig var exakt rätt svar

Postat: 7 februari 2007, 18:45:57
av sodjan
Men exakt vad som kan förväntas från en disassembler...
Det *kan* gå hyggligt att läsa koden om den kommer från en
"snygg" assembler-källkod från början, men de flesta 3G språk ("C" o.s.v)
ger oftast en alldeles för grötig (men antagligen helt fungerande!) maskinkod.
Postat: 7 februari 2007, 19:01:24
av net4all
Läser lite i "Instruktion Set" delen och det verkar inte vara altför svårt/krångligt
Det blev massor med ASM kod och det mesta fick jag inte ut nått vettigt ur..
Annars funkade allt bra.