Beste antwoord
Bijna al deze antwoorden zijn een antwoord op een andere vraag, namelijk het type processor dat de assembleertaal ondersteunt. Een werkelijke assembleertaal, ongeacht het processortype, kan echter in drie verschillende typen worden ingedeeld.
- Een basisassemblagetaal. Dit vertaalt alleen instructies in opcodes. Niets speciaals. De meeste hiervan zijn voor kleine embedded machines. Ik schreef er een voor de 8080/8080 / z80 in 79. Het herkende niet eens de prioriteit voor zijn beperkte uitdrukkingen.
- Een normale of typische assembleertaal die wel (1) maar ook pseudo-instructies en richtlijnen bevat die set codesegmenten instellen, kan datablokken genereren en nog veel meer . De meeste assemblers zijn van deze aard.
- Een macro-assembleertaal. Een goede heeft een uitgebreide macrotaal inclusief loops, substitutie en nog veel meer. Ze kunnen erg krachtig zijn. De IBM 360 Assembler is hier een goed voorbeeld van. De Microsoft x86 / x64 MASM-assembler is hier ook een voorbeeld van.
Het volgende is een voorbeeld van een macro in MASM die ik in mijn code gebruik om assembleertaal draagbaar te maken voor verschillende compilers. Sorry voor de omslachtigheid.
;
; 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
Antwoord
Zijn er veel soorten assembleertaal, of is assembleertaal uniek?
Ja, er zijn veel typen, in ieder geval RISC (meestal 3-operand, laden / opslaan, met veel registers), en CISC (meestal 2-operand en in tegenstelling tot load / store, werkt mogelijk in het geheugen zonder eerst in een register te laden).
De meest populaire RISC is ARM (maar het zijn strikt twee of drie architecturen, tenminste ARMv8 is echt anders), en bijv. MIPS een andere variant. De meest populaire CISC is x86, van Intel (en bijvoorbeeld AMD die de 64-bit x86-64 extensie heeft gemaakt). Nog steeds in gebruik een andere CISC voor IBMs mainframes.
VLIW is een andere (en Intels EPIC een soort variant van), en velen hebben dergelijke typen CPUs gemaakt, waaronder TI.
Sommige obscuur is een computer met instructieset – Wikipedia (OISC), meestal een theoretische oefening.
Er is ook computer met nulinstructieset – Wikipedia (ZISC), dus ik weet niet zeker of een assembly van toepassing is. 🙂
En door transport getriggerde architectuur – Wikipedia is de laatste uit mijn hoofd. Zijn er nog andere?
Van alle computerarchitecturen met één instructieset , is de TTA-architectuur een van de weinige die processors heeft gehad op basis van het is gebouwd en de enige met daarop gebaseerde processors wordt commercieel verkocht.