Sida 1 av 3

Maskinkod mikroprocessor!

Postat: 6 januari 2014, 14:39:35
av Platis
Måste erkänna att man bara är en glad amatör när det gäller elektronik! :) Men genom åren så har man ju ändå råkat plöja igenom(läs; ögnat igenom) en viss mängd litteratur på området! En sak som slår mej efter ett antal böcker om diverse cpu's(z80,6502) är att man aldrig får en riktig förklaring hur maskinkod översätts till verkligt arbete internt i cpu'n. Man får detaljerade beskrivningar om ALU, register, flaggor, stackar osv fungerar och i nästa steg så får man veta maskinkod, mnemonics för assembler m.m. Men antagligen så har jag läst fel böcker(el har jag sovit igenom just det kapitlet) för ingen tar upp hur dom olika maskinkoderna kodas internt i cpu'n! Förutom att det är maskprogrammerat av tillverkaren, vilket inte säger så mycket om hur det går till! Logiskt så måste det ju finnas nån minnesbank el nån typ av grind som avkodar instruktionerna!? :roll: Eller?

Re: Maskinkod mikroprocessor!

Postat: 6 januari 2014, 14:43:41
av sodjan
Ja, det är normalt en mer eller mindre komplex uppsättning av vanliga
logiska element som avkodar det hela och ser till att rätt saker
händer i processorn. Normalt så är inte heller intstruktionerna
valda slumpmässigt, utan det är mindre delar som styr mellan
huvudoperationerna. Andra delar innehåller register-nr eller
adresseringsmetod o.s.v.

Re: Maskinkod mikroprocessor!

Postat: 6 januari 2014, 14:47:31
av psynoise
Det är inte särskilt komplicerat. Från början använde nog de flesta datorer grindnät för att översätta instruktionerna till kontrollsignaler som styr datorns olika delar. Senare blev ROM billigt vilket kunde ta över den uppgiften. Idag är allt integrerat och hur det brukar gå till kan jag tyvärr inte säga.

Detta fick jag lära mig en introduktions kurs för digitalteknik där en av kursens uppgifter var just att konstruera grindnät för dessa kontroll signaler. Dock var det många år sedan nu och i vilken litteratur det kan tänkas stå något kommer jag tyvärr inte på.

Re: Maskinkod mikroprocessor!

Postat: 6 januari 2014, 14:55:39
av Platis
Vad är mikrokod?

Re: Maskinkod mikroprocessor!

Postat: 6 januari 2014, 14:59:38
av vfr
En form av "mikroprogram" som ligger i processorn och tolkar instruktionerna.

Re: Maskinkod mikroprocessor!

Postat: 6 januari 2014, 15:03:10
av TomasL
Markesjö skrev en bok för en bunt år sedan, (-75) eller så, där han dissekerade en ALPHA LSI (Även kallad Naked Mini) minidator, och gick igenom allt, inklusive microavkodningen rätt detaljerat.
Vet inte om du kan få tag på den nu, men den är rätt lärorik.

Tror det det är denna
http://libris.kb.se/bib/7276339

Re: Maskinkod mikroprocessor!

Postat: 6 januari 2014, 15:16:42
av Platis
Intressant! Ska hålla utkik efter denna bok! :)
Ang mikrokod; ersätter mikrokod maskprogrammerade instuktioner i vissa processorer, eller är det typ nåt komplement till dom redan existerande? :?:
Ber om ursäkt för dumma frågor, men är man novis så är man! :wink:

Re: Maskinkod mikroprocessor!

Postat: 6 januari 2014, 15:21:58
av Icecap
Under min utbildning lärde jag om en 16 bit dator som användes som buffer/översättare för en 18 bitars mainframe.

Vi fick genomgått mikrokoden och det var i grunden bara en sekvensstyrning av de element som finns i enheten.

Det behövs en ALU, i detta fall var det 4 st 4-bit ALU-slice som var gjorda för att kunde seriekopplas.
Sedan fanns det statusregister som kunde latcha status när det blev aktiverat av sekvensen.
Det fanns ett par register med fasta värden i: -1 och +1.

Sedan var mikrokoden mest en fråga om att sitta "manuellt" och uppfinna instruktioner och vilka funktioner de skulle ha i hårdvaran. Dessa sekvenser blev sedan lagt in i ett PROM (gamla grejer) och varje instruktion utlösta sedan en uppspelning av dessa sekvensen mikrokod.

I grunden är det ytterst ointressant att tråckla i dessa mikrokoder, det viktiga är instruktionerna och deras samarbete men låt oss ta en enkel funktion som exempel:
Decrement A

Följande steg ska utföras:
1: Ackumulatorn ska koppplas till ena ingången av ALU'n.
2: Registret med -1 ska kopplas till andra ingången av ALU'n. Vid Increment A är det +1 som används.
3: En addition ska exekveras.
4: Resultatet ska latchas in i Ackumulatorn.

Mikrokoden är då i grunden bara att se som ett antal brytare som aktiverar funktionerna precis som piggarna på en speldosa slår av de olika tonerna, det är alltså ingen intelligens som sådan, det rör sig om en sekvens som spelas upp.

Numera har de flesta moderna µC en pipeline som gör detta i steg vilket betyder att de effektivt sett kan utföra en instruktion varje klock-cykel medan att de i verkligheten behöver ett antal för att utföra dom - men att de förbereds.

Tar man de uråldriga 8031 behöver de 12 klockpulser för varje instruktion de utför, just för att hinna igenom alla stegen.

Re: Maskinkod mikroprocessor!

Postat: 6 januari 2014, 15:34:23
av DanG
Edit: Ser att ICECAP har berättat om vedermödorna på ett utmärkt sätt. Som sagt, man lärde sig en hel del, speciellt om CPU etc. var virade och därmed lämpliga för ombyggnad/förbättringar.

Åhhh, härliga forntid ... :D

Vill Du veta mer, så rekommenderar jag nedanstående länk.
http://en.wikipedia.org/wiki/AMD_Am2900
Flera "stora" datorer byggde på denna kretsfamilj, till vilken man sedan lade diverse diskret logik för att få assemblerinstruktionerna att fungera som avsett.
Detta tog en hel del plats, MODCOMPs CPUer, som jag jobbat mest med, bestod av 1-2 virade s.k. plan.
Se sid 6 på http://www.ddp116.org/modcomp/modcomp.pdf

Det roliga med dessa system var att man lärde sig mycket.

M.v.h DanG

Re: Maskinkod mikroprocessor!

Postat: 6 januari 2014, 15:36:08
av TomasL
Platis skrev:Intressant! Ska hålla utkik efter denna bok! :)
Ang mikrokod; ersätter mikrokod maskprogrammerade instuktioner i vissa processorer, eller är det typ nåt komplement till dom redan existerande? :?:
Ber om ursäkt för dumma frågor, men är man novis så är man! :wink:
Inga dumma frågor, eftersom det mesta av det här är bortglömt i dag, det var någon som sa att "i dag saknar vi den tekniska kompetensen att flyga någon till månen".

Nja mikrokod är väl ett steg emellan assemblern/OP-koderna och den egentliga instruktionsavkodningen.
Har för mig att från och med till exempel Pentium så översätts x86-assemblern till microkod i processorn, vilken sedan avkodas så processorn gör vad den skall.

Skillnaden är att i processorer som saknar microkod, är maskinkoden direkt implementerad i hårdvaran, dvs de olika bitarna i OP-koden påverkar hårdvaran direkt.
I en Pentium till exempel så påverkar maskinkoden inte hårdvaran direkt utan översätts till en serie mikroinstruktioner, vilka påverkar hårdvaran direkt.
på så sätt kan man emulera vilken intstruktionsuppsättning som helst, med samma hårdvara, utan att ändra hårdvara, så, i alla fall i teorin kan man med rätt microkod köra PPC-kod i en Pentium, typ.
Nu är det väl iofs ingen som tillverkat en sådan Pentiumprocessor, men det är fullt möjligt.

Re: Maskinkod mikroprocessor!

Postat: 6 januari 2014, 16:04:36
av blueint
Med direkt avkodning finns ju också möjligheten till "olovliga instruktioner" som kan åstadkomma mycket kalabalik internt i processorn. 68000 hade väl några sådana samt Pentium.

Re: Maskinkod mikroprocessor!

Postat: 6 januari 2014, 16:07:11
av psynoise
Jag håller med TomasL angående mikrokod. Till exempel för flygvapnets gamla Censor 932 utvecklade man språket MICRO för att ge möjlighet till symbolisk adressering. Däremot ligger assemblerspråk en abstraktionsnivå högre.
Med assemblern fick programmeraren möjlighet att tillämpa symbolisk adressering,
namnsätta och definiera symboliska variabler samt att benämna den aktuella instruktionen
med dess mnemoniska kod.
http://fht.nu/Dokument/Flygvapnet/flyg_ ... rrgc_f.pdf

Re: Maskinkod mikroprocessor!

Postat: 6 januari 2014, 16:45:46
av Krille Krokodil
Grunderna du behöver för att förstå en CPUs inre är boolesk algebra,
Kaurnaugh-diagram, synkrona tillståndsmaskiner samt lite till,
behärskar man allt detta så kan man med papper och penna konstruera en
enkel CPU. Du har alla grunderna här:

http://www.allaboutcircuits.com/vol_4/index.html

Re: Maskinkod mikroprocessor!

Postat: 6 januari 2014, 17:35:06
av Norberg
http://www.nand2tetris.org/ - Gratis kurs på nätet där ett av stegen är att designa en egen enkel CPU ifrån grunden. Man börja med NAND grindar och bygger sedan all byggstenar man behöver utifrån det tills man har en helt komplett CPU. Vill man sedan gå vidare efter det så fortsätter kursen med kompilator design och att därefter skriva ett eget OS. CPUn är väldigt enkel så den har ingen microkod men i och med att man bygger CPU själv så ger det troligen mer förståelse jämfört med att bara läsa teori.

Re: Maskinkod mikroprocessor!

Postat: 6 januari 2014, 17:39:00
av discomike
Kan tipsa om ett tal jag såg på årets CCC-kongress "Introduction to Processor Design" där han förklarar en enkel cpu kärna fungerar och implementerar den i vhdl:



Han visar även upp hur lätt det är att plantera en hårdvaru-bakdörr i en ARM-kärna (med bara 6 rader extra kod) som sen utnyttjas för att utföra en privilege escalation-attack.