Paras vastaus
Lähes kaikki nämä vastaukset vastaavat eri kysymykseen, nimittäin prosessorityyppiä, jota kokoonpanokieli tukee. Todellinen kokoonpanokieli voidaan prosessorityypistä riippumatta kuitenkin luokitella kolmeen eri tyyppiin.
- Peruskokoonpanokieli. Tämä vain kääntää ohjeet opcodeiksi. Ei mitään hienoa. Suurin osa näistä on tarkoitettu pieniin upotettuihin koneisiin. Kirjoitin yhden mallille 8080/8080 / z80 vuonna ’79. Se ei edes tunnistanut rajoitettujen lausekkeiden etusijaa.
- Normaali tai tyypillinen kokoonpanokieli, joka tekee (1) mutta sisältää myös näennäisohjeita ja direktiivejä, jotka asettavat asetetut koodisegmentit, voi luoda tietolohkoja ja paljon muuta . Useimmat kokoonpanijat ovat tämän luonteisia.
- Makrokokoonpanokieli. Hyvällä kielellä on laaja makrokieli, joka sisältää silmukoita, korvauksia ja paljon muuta. Ne voivat olla erittäin voimakkaita. IBM 360 Assembler on hyvä esimerkki tästä. Microsoft x86 / x64 MASM -kokoonpanija on myös esimerkki tästä.
Seuraava on esimerkki MASM: n makrosta, jota käytän koodissani tekemään kokoonpanokielen kannettavaksi eri kääntäjille. Anteeksi käärimisen.
;
; This macro declares an external data element.
;
External macro dName:req, dType:req
local dataName, xName
xName textequ
forc chr, <&dName>
ifidn <&chr>, <\_>
xName textequ
else
xName catstr xName, <&chr> ;;catstr &xName, &chr
endif
endm
if (\_borland eq true)
dataName catstr <\_>, <&dName&> ;; extern "C": Borland"s 5.5.1 C++
elseif (\_comeau eq true)
dataName catstr <\_>, <&dName&> ;; extern "C": Comeau 4.2.45.2 C++
elseif (\_gnu eq true)
dataName catstr <\_>, <&dName&> ;; extern "C": GNU 2.95.3-5 C++
elseif (\_ibm eq true)
dataName catstr <\_>, <&dName&> ;; extern "C": IBM VisualAge 4.0 C++
elseif (\_intel eq true)
dataName catstr <\_>, <&dName&> ;; extern "C": Intel 5.0.1 reference C++
elseif (\_microsoft eq true)
if (\_x32 eq true)
dataName catstr <\_>, <&dName&> ;; extern "C": Microsoft Visual Studio
else
dataName textequ <&dName&> ;; extern "C": Microsoft Visual Studio
endif
elseif (\_clr eq true)
if (\_x32 eq true)
dataName catstr <\_>, <&dName&> ;; extern "C": Microsoft Visual Studio with -clr option
else
dataName textequ <&dName&> ;; extern "C": Microsoft Visual Studio with -clr option
endif
endif
extern dataName:dType
\%xName equ dataName
endm
Vastaus
Onko monenlaisia asennuskieliä, vai onko kokoonpanokieli ainutlaatuinen?
Kyllä, on olemassa monia tyyppejä, ainakin RISC (yleensä 3-operandi, load / store, monilla rekistereillä) ja CISC (yleensä 2-operandi ja toisin kuin kuorma) / store, voi toimia muistissa lataamatta ensin rekisteriä).
Suosituin RISC on ARM (mutta se on ehdottomasti kaksi tai kolme arkkitehtuuria, ainakin ARMv8 on todella erilainen), ja esim. MIPS toinen variantti. Suosituin CISC on x86, Inteliltä (ja esim. AMD, joka teki 64-bittisen x86-64-laajennuksen). Vielä käytössä yksi toinen CISC IBM: n keskusyksiköissä.
VLIW on toinen (ja Intelin EPIC eräänlainen muunnos), ja monet ovat tehneet tällaisia suorittimia, mukaan lukien TI.
Jotkut hämärä on yksi ohjeistettu tietokone – Wikipedia (OISC), enimmäkseen teoreettinen harjoitus.
Siellä on myös nollakäskyjoukko – Wikipedia (ZISC), joten en ole varma, onko kokoonpano voimassa. 🙂
Ja liikenteen laukaisema arkkitehtuuri – Wikipedia on viimeinen pääni yläosasta. Onko muita?