Bedste svar
Næsten alle disse svar svarer på et andet spørgsmål, nemlig hvilken type processor samlingssproget understøtter. Dog kan et faktisk samlingssprog klassificeres i tre forskellige typer uanset processortype.
- Et grundlæggende samlingssprog. Dette oversætter bare instruktioner til opkoder. Intet smukt. De fleste af disse er til små indlejrede maskiner. Jeg skrev en til 8080/8080 / z80 i 79. Det anerkendte ikke engang forrang for dets begrænsede udtryk.
- Et normalt eller typisk samlingssprog, der gør (1) men også indeholder pseudo-instruktioner og direktiver, der indstiller sæt kodesegmenter, kan generere datablokke og meget mere . De fleste samlere er af denne art.
- Et makro-samlingssprog. En god en har et omfattende makro sprog inklusive sløjfer, erstatning og meget mere. De kan være meget stærke. 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 bruger i min kode til at gøre samlesprog bærbart til forskellige kompilatorer. Undskyld for omviklingen.
;
; 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 der mange typer samlingssprog, eller er forsamlingssprog unikt?
Ja, der er mange typer, i det mindste RISC (generelt 3-operand, load / store, med mange registre) og CISC (generelt 2-operand og i modsætning til load / butik, kan arbejde på hukommelse uden først at indlæse i et register).
Mest populære RISC er ARM (men det er strengt to eller tre arkitekturer, i det mindste er ARMv8 virkelig anderledes), og f.eks. MIPS en anden variant. Mest populære CISC er x86 fra Intel (og fx AMD, der lavede 64-bit x86-64 udvidelse). Stadig i brug en anden CISC til IBMs mainframes.
VLIW er en anden (og Intels EPIC er en slags variant af), hvor mange har lavet sådanne typer CPUer inklusive TI.
Nogle obskur er en instruktionscomputer – Wikipedia (OISC), for det meste en teoretisk øvelse.
Der er også computer med nul instruktionssæt – Wikipedia (ZISC), så jeg er ikke sikker på, at en samling finder anvendelse. 🙂
Og transportudløst arkitektur – Wikipedia er den sidste fra toppen af mit hoved. Er der andre?
Af alle en instruktions sæt computer -arkitekturer er TTA-arkitekturen en af de få, der har haft processorer baseret på den blev bygget, og den eneste der har processorer baseret på den solgt kommercielt.