Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Huiswerkvragen: Exacte vakken (https://forum.scholieren.com/forumdisplay.php?f=17)
-   -   [IN] microcode en assemblercode (https://forum.scholieren.com/showthread.php?t=1792461)

WAT 18-02-2010 14:03

microcode en assemblercode
 
ik loop helemaal vast in hoe beide codes toe te passen? Wie heeft er genoeg ervaring met deze 2 programmeertalen om mij de basics te kunnen uitleggen?

Kazet Nagorra 19-02-2010 08:50

Ik heb iets van 5 jaar geleden wel met assembler moeten werken, maar het is toch gewoon hetzelfde principe als alle andere programmeertalen (alleen dan wat omslachtiger)? Wat begrijp je precies niet?

WAT 19-02-2010 09:38

het probleem zit em voornamelijk in dat ik de overslag van assembler naar microcode niet begrijp en dat ik helemaal gek word van het boek :P

ILUsion 20-02-2010 20:18

Er zijn verschillende soorten assembler, elke computerarchitectuur heeft er zijn eigen dialect van en hetzelfde kan je zeggen van microcode; een expert in x85-assembler hoeft dus ook geen expert in powerpc of avr-assembler te zijn en exact hetzelfde als het gaat over microcode (maar nog extremer).

Om gewoon te schetsen hoe programmeertalen min of meer in elkaar zitten:
een hoge programmeertaal (pascal, C, ...) kan je door een compiler laten omzetten in machinecode, dit kan je in feite zien als binaire vorm van assembler. Assembler-code wordt door een assembler vrij makkelijk omgezet naar die machinecode (met het voordeel dat je in assembler variabelen als naam kan gebruiken, in machinecode worden dat gewoon getalletjes en dat gelijkaardige operaties eenzelfde naam hebben in assembler maar een verschillend nummer kunnen hebben in machinecode: voor de machine is het anders om een constante op te tellen bij een register of twee registers op te tellen). Één instructie in een hoge taal zoals:
Code:

IF a = b
  THEN
    bla;
  ELSE
    blabla;
  END;

wordt omgezet naar verschillende commando's in assembler (of machinecode, maar dat noteer ik niet):
Code:

JNE a, b, labelELSE
bla
JMP labelEND
labelELSE:
blabla
labelEND:

Hoe dat vertalen exact gebeurt, hangt een beetje af van wat voor architectuur je hebt; instructies kunnen op een andere architectuur mogelijk helemaal anders vertaald worden. In een architectuur zonder aftrekking, moet je om te kunnen aftrekken gewoon het negatieve getal bij optellen.

Met microcode gebeurt er iets gelijkaardigs: elk assemblercommando (of beter: elke instructie in de machinecode) wordt omgezet in nog kleinere instructies: bv. haal waarde uit register X, schrijf deze naar de adresbus van het geheugen, ... Voor het bovenstaande voorbeeld zou dat voor enkel de eerste JNE-instructie bv. kunnen zijn:
Code:

pop een waarde van de stack naar tijdelijk register
plaats de waarde van het tijdelijk register naar ALU-ingang 1
pop een waarde van de stack naar tijdelijk register
plaats de waarde van het tijdelijk register naar ALU-ingang 2
pop een waarde van de stack naar tijdelijk register
plaats de bitsequentie voor aftrekken op controleingang van ALU
controleer de uitgangsflag "gelijk aan 0?" van de ALU
als deze flag gezet is: plaats de waarde van het tijdelijk register in de instruction pointer
haal de volgende instructie op

Deze hangen dus even hard vast aan de architectuur: op een architectuur zonder tijdelijk register zal je bovenstaand voorbeeld niet kunnen runnen. Je moet de processor dus op een veel gedetailleerder niveau kennen om microcode te schrijven: sommige locaties die je in microcode hebt, zijn anders dan in assembler. Stel dat je A en B wilt optellen, ga je over het algemeen A naar de ene ingang van de ALU voeden, B naar de andere ingang, op een controleingang de bits voor optelling en het resultaat ergens anders weer wegschrijven. Maar in assembler kan je niet direct aan de controleingangen; dat gaat in microcode wel. Dat omzetten naar microcode wordt in de processor gedaan; in de meeste gevallen moet je je daar dus niets van aantrekken tenzij je zelf een processor zou bouwen of dat je leert hoe het werkt.

Heel simpel gesteld: met een hoge taal maak je de computer (maar vooral jezelf) wijs wat er moet gebeuren, met assembler maak je de processor wijs wat er moet gebeuren en met microcode maak je elk van de onderdelen van de processor duidelijk wat ze moeten doen.

sean_b 20-02-2010 21:47

@ILUsion: bedankt voor de gestructureerde uitleg, ik begrijp het nu zo ongeveer.
@TS: Ik neem aan dat jij ook trotse eigenares bent van het Computers/organisatie/architectuur/communicatie boek ? wat een $^%& boek is dat.

WAT 20-02-2010 21:57

Citaat:

ILUsion schreef: (Bericht 30215560)
. Dat omzetten naar microcode wordt in de processor gedaan; in de meeste gevallen moet je je daar dus niets van aantrekken tenzij je zelf een processor zou bouwen of dat je leert hoe het werkt.

dat is nu precies waar wij mee bezig zijn op school :P daarom mijn vraag hier :P

@ sean_b idd wij hebben dat boek ook, heel hulp daar uit te verwachten :/

ILUsion 21-02-2010 09:45

Citaat:

WAT schreef: (Bericht 30215892)
dat is nu precies waar wij mee bezig zijn op school :P daarom mijn vraag hier :P

@ sean_b idd wij hebben dat boek ook, heel hulp daar uit te verwachten :/

God, dan zit je al in een vrij specifieke richting, gok ik (hier hebben we vooral tot op assembler-niveau gezien (heel klein beetje microcodeniveau voor 2 academische architecturen) en dat is universitair in een elektronica/informatica-richting). Waarschijnlijk moet je dus niet al te hard tillen aan dat stukje. Zeker omdat dergelijke microcode zeer architectuurafhankelijk is, en je dus al bijna een datasheet van honderden/duizenden pagina's achter de kiezen moet hebben om uit het hoofd microcode op te schrijven voor 1 type processor (zeker als je de bijhorende binaire voorstelling moet gebruiken bv.) Het lijkt me dat dat enkel relevant is voor de mensen die CPUs ontwikkelen. Het belangrijkste wat je moet meehebben van die omzetting, is een beetje weten hoe je data doorheen je CPU vloeit: hoe een instructie ongeveer opgehaald wordt (dat je weet dat dat verschillende stapjes zijn), hoe geheugeninstructies in hun werk gaan, ...

Maar goed, daar ben je weinig verder mee. Ik geloof dat een van de basiswerken daaromtrent de werken van A. Tanenbaum zijn (tenzij je daarop al doelde): voor dit onderwerp zal dat "Structured Computer Organization" (ISBN 0-13-148521-0) zijn, lijkt me. En anders staan er op WikiPedia wel wat referenties als je zoekt op microcode (in de Engelse tenminste; sowieso zou ik aanraden om Engelse referentiewerken te gebruiken als je de taal genoeg machtig bent).

WAT 28-02-2010 16:16

hmmm, oke het is mij tenminste iets duidelijker nu :P

en wij doen in informatica jaar 1 een periode TI (technische informatica) vandaar de zooi op het CPU, en we hebben er een hele handleidinjg voor gekregen hoor, alleen is die niet heel duidelijk vaak :P


Alle tijden zijn GMT +1. Het is nu 08:17.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.