Najlepsza odpowiedź
Prawie wszystkie te odpowiedzi są odpowiedzią na inne pytanie, mianowicie typ procesora obsługiwany przez asembler. Jednak rzeczywisty język asemblera, niezależnie od typu procesora, można podzielić na trzy różne typy.
- Podstawowy język asemblera. To tylko tłumaczy instrukcje na kody operacyjne. Nic fajnego. Większość z nich jest przeznaczona dla małych maszyn wbudowanych. Napisałem jeden dla 8080/8080 / z80 w 1979 roku. Nie rozpoznał nawet pierwszeństwa dla swoich ograniczonych wyrażeń.
- Normalny lub typowy język asemblera, który ma (1), ale zawiera również pseudo-instrukcje i dyrektywy, które ustawiają segmenty kodu, może generować bloki danych i wiele więcej . Większość asemblerów ma taką naturę.
- Język asemblera makr. Dobry ma rozbudowany język makr, w tym pętle, podstawienia i wiele więcej. Mogą być bardzo potężne. Dobrym przykładem jest IBM 360 Assembler. Asembler Microsoft x86 / x64 MASM również jest tego przykładem.
Poniżej znajduje się przykład makra w MASM, którego używam w moim kodzie, aby uczynić asembler przenośnym dla różnych kompilatorów. Przepraszamy za zawijanie.
;
; 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
Odpowiedź
Czy jest wiele typów języka asemblera, czy też język asemblera unikalny?
Tak, istnieje wiele typów, przynajmniej RISC (generalnie 3-operandowy, ładuj / przechowuj, z wieloma rejestrami) i CISC (generalnie 2-operandowy, w przeciwieństwie do load / store, może pracować na pamięci bez wcześniejszego ładowania do rejestru).
Najpopularniejszym RISC jest ARM (ale to ściśle dwie lub trzy architektury, przynajmniej ARMv8 jest naprawdę inny), a np. MIPS inny wariant. Najpopularniejszym CISC jest x86, firmy Intel (i np. AMD, która stworzyła 64-bitowe rozszerzenie x86-64). Wciąż w użyciu jest jeszcze jeden CISC dla mainframeów IBM.
VLIW jest kolejnym (i EPIC Intela jest swego rodzaju wariantem), a wielu stworzyło takie typy procesorów, w tym TI.
niejasne jest jeden zestaw instrukcji – Wikipedia (OISC), głównie ćwiczenie teoretyczne.
Jest też komputer z zerowym zestawem instrukcji – Wikipedia (ZISC), więc nie jestem pewien, czy ma zastosowanie asemblacja. 🙂
A architektura wyzwalana transportem – Wikipedia jest ostatnią od góry mojej głowy. Czy są inne?
Ze wszystkich architektur jednego komputera z zestawem instrukcji architektura TTA jest jedną z niewielu, w których procesory są oparte na który zbudował i jako jedyny ma oparte na nim procesory sprzedawane na rynku.