Beste svaret
Nesten alle disse svarene er svar på et annet spørsmål, nemlig hvilken type prosessor monteringsspråket støtter. Imidlertid kan et faktisk monteringsspråk, uavhengig av prosessortype, klassifiseres i tre forskjellige typer.
- Et grunnleggende monteringsspråk. Dette oversetter bare instruksjoner til opkoder. Ikke noe spesielt. De fleste av disse er for små innebygde maskiner. Jeg skrev en til 8080/8080 / z80 i ‘79. Det anerkjente ikke engang forrang for dets begrensede uttrykk.
- Et normalt eller typisk forsamlingsspråk som gjør (1), men som også inneholder pseudo-instruksjoner og direktiver som setter settkodesegmenter, kan generere datablokker og mye mer . De fleste montører er av denne karakteren.
- Et makromonteringsspråk. Et godt språk har et omfattende makrospråk inkludert sløyfer, erstatning og mye mer. De kan være veldig kraftige. IBM 360 Assembler er et godt eksempel på dette. Microsoft x86 / x64 MASM-samleren er også et eksempel på dette.
Følgende er et eksempel på en makro i MASM som jeg bruker i koden min for å gjøre monteringsspråk bærbart for forskjellige kompilatorer. Beklager viklingen.
;
; 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
Svar
Er det mange typer monteringsspråk, eller er monteringsspråk unikt?
Ja, det er mange typer, i det minste RISC (vanligvis 3-operand, last / lagring, med mange registre), og CISC (generelt 2-operand og ulikt belastning / store, kan fungere på minne uten først å laste inn i et register).
Mest populære RISC er ARM (men det er strengt tatt to eller tre arkitekturer, i det minste er ARMv8 veldig annerledes), og f.eks. MIPS en annen variant. Den mest populære CISC er x86, fra Intel (og f.eks. AMD som laget 64-biters x86-64-utvidelsen). Fortsatt i bruk en annen CISC for IBMs mainframes.
VLIW er en annen (og Intels EPIC er en slags variant av), med mange som har laget slike typer CPUer inkludert TI.
Noen obskur er en instruksjons-datamaskin – Wikipedia (OISC), for det meste en teoretisk øvelse.
Det er også null instruksjonsdatamaskin – Wikipedia (ZISC), så jeg er ikke sikker på at en samling gjelder. 🙂
Og transportutløst arkitektur – Wikipedia er den siste fra toppen av hodet mitt. Er det andre?
Av alle én instruksjonsdatamaskin -arkitektur, er TTA-arkitekturen en av få som har hatt prosessorer basert på den ble bygget, og den eneste som har prosessorer basert på den selges kommersielt.