Ekzakte ĝustatempa (JIT)Paŭsaĵo ekzakte ĝustatempa
#000001
Maŝinkodo aŭ maŝinlingvo estas aro de instrukciaĵo efektivigitaj rekte je la procesoro de komputilo (CPU).
Ĉiu instrukcio plenumas tre specifan taskon, kiel ekzemple ŝarĝo, salto, aŭ ALU operacion sur unuo de datenoj en CPU-registro aŭ memoro.
Ĉiu programo rekte ruligita per CPU konsistas el serio de tia instrukciaĵo.
#000002
Nombra maŝinkodo (t.e., ne kunigokodo) povas esti rigardita kiel la plej malaltnivela reprezentado de kompilita aŭ kunvenita komputila programo aŭ kiel primitivulo kaj hardvaro-dependanto
Dum estas eble skribi programojn rekte en nombra maŝinkodo, ĝi estas teda kaj erarema administri individuajn pecojn kaj kalkuli nombrajn adresojn kaj konstantojn mane.
Tial-maŝinkodo kutimas preskaŭ neniam skribi programojn en modernaj kuntekstoj, krom eble por kelkaj kodotranĉeroj dum malalta nivelsenararigado.
#000003
Preskaŭ ĉiuj praktikaj programoj hodiaŭ estas skribitaj en higher-nivelaj lingvoj aŭ asembla lingvo.
La fontkodo tiam estas tradukita al efektivigebla maŝinkodo per servaĵoj kiel ekzemple kompililoj, asembleroj, kaj ligantoj, kun la grava escepto de interpretitaj programoj, [1] kiuj ne estas tradukitaj en maŝinkodon.
Tamen, la interpretisto mem, kiu povas esti vidita kiel ekzekutisto aŭ procesoro, elfarante la instrukciaĵon de la fontkodo, tipe konsistas el rekte efektivigebla maŝinkodo (generita de kunigo aŭ altnivela lingva fontkodo).
#000004
Maŝinkoda instrukciserio povas havi ĉiujn instrukciaĵon de la sama longo, aŭ ĝi povas havi variablo-longan instrukciaĵon.
Kiel la padronoj estas fakorganizitaj varias forte laŭ la speciala arkitekturo kaj ofte ankaŭ kun la speco de instrukcio.
La plej multaj instrukciaĵo havas unu aŭ pluraj observejkod kampojn kiel ekzemple kiu precizigas la bazan instrukciospecon (kiel ekzemple aritmetiko, logiko, salto, ktp.) kaj la faktan operacion (aldonu aŭ kompariblu) kaj aliajn kampojn kiuj povas doni la specon de la operacianto (j), la alparoltitolon (j), la traktan ofseton (j) aŭ indekson, aŭ la realan valoron mem (tiaj konstantaj operaciantoj enhavis en instrukcio estas nomitaj imediatoj).
#000006
Ne ĉiuj maŝinoj aŭ individua instrukciaĵo havas eksplicitajn operaciantojn.
Akumulilmaŝino havas kombinitan maldekstran operacianton kaj rezultigas implican akumulilon por la plej multaj artimetika instrukciaĵo.
Aliaj arkitekturoj (kiel ekzemple 8086 kaj la x86-familio) havas akumulilversiojn de ofta instrukciaĵo, kun la akumulilo rigardita kiel unu el la ĝeneralaj registroj per pli longa instrukciaĵo.
Stakmaŝino havas la plej grandan parton aŭ ĉiujn siaj operaciantoj sur implica stako.
Al Sepciala celo-instrukciaĵo ankaŭ ofte mankas eksplicitaj operaciantoj (CPUID en la X86 Arkitekturarkitekturo skribas valorojn en kvar implicajn cellokregistrojn, ekzemple).
Tiu distingo inter eksplicitaj kaj implicaj operaciantoj estas grava en maŝinkodgeneratoroj, precipe en la registrasigno kaj vivaj intervalaj spuradpartoj.
Bona kodoptimumiganto povas spuri implicajn same kiel eksplicitajn operaciantojn kiuj povas permesi pli oftan konstantan disvastigon, konstantan faldadon de registroj (registro asignis la rezulton de konstanta esprimo liberigita supren anstataŭigante ĝin per tiu konstanta) kaj aliaj kodpliigoj.
#000007
Komputila programo estas sekvenco de instrukciaĵo kiuj estas efektivigitaj per CPU.
Dum simplanimaj procesoroj efektivigas instrukciaĵon unu post alia, superskalar procesoroj estas kapablaj je efektivigado de pluraj instrukciaĵo tuj.
#000008
Programfluo povas esti influita per specialaj "salto-" instrukcioj kiuj transdonas ekzekuton al instrukcio krom la nombre sekvan.
Kondiĉaj saltoj estas prenitaj (ekzekuto daŭras hejme alia) aŭ ne (ekzekuto daŭras ĉe la venonta instrukcio) depende de iom da kondiĉo.
#000009
Multe pli legebla interpretado de maŝinlingvo, nomita asembla lingvo, utiligas mnemonikajn kodojn por rilati al maŝinkodinstrukciaĵo, prefere ol uzado de la numeraj valoroj de la instrukciaĵo rekte.
Ekzemple, sur la Zilog Z80 procesoro, la maŝinkodo00000101, kiu igas la CPU dekrementi laB procesorregistro, estus reprezentita en asembla lingvo kielDEC B.
#000010
La MIPS kiun arkitekturo disponigas al specifa ekzemplo por maŝino kodigas kies instrukciaĵon estas ĉiam 32 bitojn longaj.
La ĝenerala speco de instrukcio ricevas per la observejo (operacio) kampo, la plej alta 6 bitoj.
J-speca (salto) kaj I-speca (tuja) instrukciaĵo estas plene precizigitaj per observejo.
R-speca (registro) instrukciaĵo inkludas kroman kampofunkt por determini la precizan operacion.
La kampoj uzitaj en tiuj tipoj estas:
#000011
r, rt, kaj rd indikas registroperaciantojn;
kaj la adreso aŭ tujaj kampoj enhavas operacianton rekte.
#000012
Ekzemple, aldoni la registrojn 1 kaj 2 kaj meti la rezulton en registron 6 estas ĉifritaj:
#000013
Ŝarĝu valoron en registron 8, prenita de la memorĉelo 68 ĉeloj post la loko listigis en registro 3:
#000014
Saltante al la adreso 1024:
#000015
En kelkaj komputilaj arkitekturoj, la maŝinkodo estas efektivigita per eĉ pli fundamenta subesta tavolo nomita mikrokodo, provizante oftan maŝinlingvinterfacon trans linio aŭ familion de malsamaj modeloj de komputilo per vaste malsamaj subestaj datumfluoj.
Tio estas farita por faciligi portadon de maŝinlingvoprogramoj inter malsamaj modeloj.
Ekzemplo de tiu uzo estas la IBM Sistemo/360 familio de komputiloj kaj iliaj posteuloj.
Kun datumfluaj padlarĝoj de 8 bitoj ĝis 64 bitoj kaj pretere, ili tamen prezentas oftan arkitekturon sur la maŝinlingvonivelo trans la tuta linio.
#000016
Maŝinkodo estas ĝenerale malsama ol Bajtkodo (ankaŭ konata kiel p-kodo), kiu estas aŭ efektivigita fare de interpretisto aŭ sin kompiliten en maŝinkodon por pli rapida (rekta) ekzekuto.
Escepto estas kiel ekzemple kiam procesoro estas dizajnita por utiligi specialan Bajtkodon rekte kiel ĝian maŝinkodon, estas la kazo kun Java procesoroj.
#000018
Maŝinkodo kaj kunigokodo foje estas nomitaj indiĝena kodo dum rilatado al platformo-dependaj partoj de lingvotrajtoj aŭ bibliotekoj.
#000019
La Harvard-arkitekturo estas komputila arkitekturo kun fizike aparta stokado kaj signalpadoj por la kodo (instrukciaĵo) kaj datenoj.
Hodiaŭ, la plej multaj procesoroj efektivigas tiajn apartajn signalpadojn pro spektaklokialoj sed fakte efektivigas Modifitan Harvard-arkitekturon, [ citaĵo bezonis ] tiel ke ili povas apogi taskojn kiel ŝarĝado de ruligebla programo de disko kiel datenoj kaj tiam efektivigado de ĝi.
Harvard-arkitekturo estas kontrastita al la Von Neumann-arkitekturo, kie datenoj kaj kodo estas stokitaj en la sama memoro kiu estas legita fare de la procesoro permesanta al la komputilo efektivigi komandojn.
#000020
De la perspektivo de procezo, la kodspaco estas la parto de sia adresspaco kie la kodo en ekzekuto estas stokita.
En multitasking sistemoj tio konsistas el la kodsegmento de la programo kaj kutime el komunaj bibliotekoj.
En multi-surfadeniganta medio, malsamaj fadenoj de unu procezo dividas kodspacon kune kun datenspaco, kiu reduktas la lumfolion de kuntekstenrangigo konsiderinde kiel komparite kun procezenrangigo.
#000021
Ĝi estis dirita [ fare de kiu?
tamen, Usono-Kopirajto-oficejo enkalkulas kopirajtoregistradon de komputilaj programoj [5] kaj la maŝinkodo de programo foje povas esti malkompilita por igi it funkciadon pli facile komprenebla al homoj.
#000022
Rekonadscienca profesoro Douglas Hofstadter komparis maŝinkodon kun genetika kodo, dirante ke "Rigardi programon skribitan en maŝinlingvo estas vage komparebla al rigardado DNA molekulatomon de atomo."
#000023
Maŝinkodo estas la maniero, laŭ kiu komputilo interne reprezentas datenojn aŭ instrukciojn. En strikta senco la vorto kutime distingas la fonto-kodon de programo aŭ ties pseŭdo-kodon de tiu interna reprezentaĵo. En preskaŭ ĉiuj nuntempaj komputiloj la maŝinkodo estas duuma.
#000026
La cirkvitoj estas duumaj sistemoj, t.e. ili laboras kun nur du tensiaj niveloj. Tiuj niveloj estas nomitaj 0 kaj 1, kaj la maŝinolingvo uzas nur tiujn du signojn. Tiel uzeblas la bulea algebro kaj la duuma sistemo por la dezajno de cirkvitoj kaj en ilia programado.
#000027