Jakie są różne typy języków asemblera?


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.

  1. 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ń.
  2. 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ę.
  3. 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.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *