📄 as_de.tex
字号:
%%---------------------------------------------------------------------------\section{Format der Eingabedateien}\label{AttrTypes}Wie die meisten Assembler auch erwartet AS genau einen Befehl pro Zeile(Leerzeilen sind nat"urlich auch zugelassen). Die Zeilen d"urfen nichtl"anger als 255 Zeichen werden, dar"uber hinaus gehende Zeichen werdenabgeschnitten.\parEine einzelne Zeile hat folgendes Format:\begin{verbatim}[Label[:]]<Befehl>[.Attribut] [Parameter[,Parameter..]] [;Kommentar]\end{verbatim}Eine Zeile darf dabei auch "uber mehrere Zeilen in der Quelldateiverteilt sein, Folgezeichen (\verb!\!) verketten diese Teile dann zueiner einzigen Zeile. Zu beachten ist allerdings, da"s aufgrund der internen Pufferstruktur die Gesamtzeile nicht 256 Zeichen "uberschreitendarf. Zeilenangaben in Fehlermeldungen beziehen sich immer auf dieletzte Zeile einer solchen zusammengesetzten Zeile.\parDer Doppelpunkt nach dem Label ist optional, falls das Label in derersten Spalte beginnt (woraus folgt, da"s der Befehl niemals in Spalte1 beginnen darf). Man mu"s ihn aber setzen, falls das Label nichtin der ersten Spalte beginnt, damit AS es von einem Befehl unterscheidenkann. In letzterem Fall mu"s "ubrigens zwischen Doppelpunkt und demBefehl mindestens ein Leerzeichen stehen, falls der eingestellteZielprozessor zu denjenigen geh"ort, bei denen das Attribut aucheine mit einem Doppelpunkt abgetrennte Formatangabe sein darf. DieserKnopf ist aus Eindeutigkeitsgr"unden n"otig, da sonst keineUnterscheidung zwischen Befehl mit Format und Label mit Befehl m"oglichw"are.\parEinige Signalprozessorreihen von Texas Instruments verwenden den f"ur dasLabel vorgesehenen Platz wahlweise auch f"ur einen Doppelstrich(\verb!||!), der die parallele Ausf"uhrung mit der vorangehendenInstruktion anzeigt. Wenn diese beiden Instruktionen auf Maschinenebenein einem einzigen Wort vereinigt werden (C3x), macht ein zus"atzlichesLabel vor der zweiten Anweisung nat"urlich keinen Sinn und ist auch nichtvorgesehen. Anders sieht es beim C6x mit seinen Instruktionspaketenvariabler L"ange aus: Wer dort (unsch"onerweise...) mitten in ein Pakethineinspringen will, mu"s das Label daf"ur in eine Extrazeile davor setzen(das gleiche gilt "ubrigens auch f"ur Bedingungen, die aber zusammen mitdem Doppelstrich in einer Zeile stehen d"urfen).\parDas Attribut wird von einer Reihe von Prozessoren benutzt, umSpezialisierungen oder Kodierungsvarianten eines bestimmten Befehls zuspezifizieren. Die bekannteste Nutzung des Attributs ist die Angabe derOperandengr"o"se, wie z. B. bei der 680x0-Familie (Tabelle\ref{TabAttrs}).\begin{table*}[htb]\begin{center}\begin{tabular}{|l|l|l|}\hlineAttribut & arithmetisch-logischer Befehl & Sprungbefehl \\\hline\hlineB & Byte (8 Bit) & --------- \\W & Wort (16 Bit) & --------- \\L & Langwort (32 Bit) & 16-Bit-Displacement \\Q & Vierfachwort (64 Bit) & --------- \\S & Single Precision (32 Bit) & 8-Bit-Displacement \\D & Double Precision (64 Bit) & --------- \\X & Extended Precision (80/96 Bit) & 32-Bit-Displacement \\P & Dezimalgleitkomma (80/96 Bit) & --------- \\\hline\end{tabular}\end{center}\caption{Erlaubte Attribute (Beispiel 680x0) \label{TabAttrs}}\end{table*}\parDa sich diese Anleitung nicht gleichzeitig als Handbuch f"ur die von ASunterst"utzten Prozessorfamilien versteht, ist dies leider auch nicht derrichtige Platz, um hier alle m"oglichen Attribute f"ur alle unterst"utztenFamilien aufzuz"ahlen. Es sei aber angemerkt, da"s i.a. nicht alle Befehlealle Attribute zulassen, andererseits das Fortlassen eines Attributs meistzur Verwendung der f"ur diese Familie ,,nat"urlichen'' Operandengr"o"sef"uhrt. Zum genaueren Studium greife man auf ein Programmierhandbuch f"urdie jeweilige Familie zur"uck, z.B. in \cite{Williams} f"ur die 68000er.\parBei TLCS-9000, H8/500 und M16(C) dient das Attribut sowohl der Angabe derOperandengr"o"se, falls diese nicht durch die Operanden klar sein sollte,als auch der des zu verwendenden Befehlsformates.Dieses mu"s durch einen Doppelpunkt von der Operandengr"o"se getrennt werden,z.B. so:\begin{verbatim} add.w:g rw10,rw8\end{verbatim}Was dieses Beispiel nicht zeigt, ist, da"s die Formatangabe auch ohneOperandengr"o"se geschrieben werden darf. Steht demgegen"uber eineOperandengr"o"se ohne Formatangabe, verwendet AS automatisch dask"urzeste Format. Die erlaubten Befehlsformate und Operandengr"o"sensind vom Maschinenbefehl abh"angig und k"onnen z.B. \cite{Tosh9000},\cite{HitH8_5}, \cite{MitM16} bzw. \cite{MitM16C} entnommen werden.\parDie Zahl der Befehlsparameter ist abh"angig vom Befehl und kannprinzipiell zwischen 0 und 20 liegen. Die Trennung der Parametervoneinander erfolgt ausschlie"slich durch Kommas (Ausnahme: DSP56xxx,dessen parallele Datentransfers durch Leerzeichen getrennt werden),wobei in Klammern oder Hochkommas eingeschlossene Kommas nat"urlichnicht beachtet werden.\parAnstelle eines Kommentars am Ende kann die Zeile auch nur aus einemKommentar bestehen, wenn er in der ersten Spalte beginnt.\parBei den Leerzeichen zur Trennung einzelnen Komponenten darf es sichgenauso gut um Tabulatoren handeln.%%---------------------------------------------------------------------------\section{Format des Listings}Das von AS bei Angabe der Kommandozeilenoptionen \tty{l} oder \tty{L}erzeugte Listing l"a"st sich grob in folgende Teile gliedern:\begin{enumerate}\item{Wiedergabe des assemblierten Quellcodes;}\item{Symbolliste;}\item{Makroliste;}\item{Funktionsliste;}\item{Belegungsliste;}\item{Querverweisliste.}\end{enumerate}Letztere beide werden nur erzeugt, wenn sie durch zus"atzlicheKommandozeilenoptionen angefordert wurden.\parIm ersten Teil listet AS den kompletten Inhalt aller Quelldateien inklusivedes erzeugten Codes auf. Eine Zeile in diesem Listing hat dabei folgende Form:\begin{verbatim}[<n>] <Zeile>/<Adresse> <Code> <Quelle>\end{verbatim}Im Feld $n$ zeigt AS die Include-Verschachtelungstiefe an. DieHauptdatei (die Datei, mit der die Assemblierung begann), hat dabei dieTiefe 0, von dort aus eingebundene Dateien haben Tiefe 1 usw. Die Tiefe0 wird dabei nicht angezeigt.\parIm Feld \tty{Zeile} wird die Zeilennummer bezogen auf die jeweilige Dateiausgegeben. Die erste Zeile einer Datei hat dabei Nummer 1. Die Adresse,an der der f"ur diese Zeile erzeugte Code abgelegt wurde, folgt hinter demSchr"agstrich im Feld \tty{Adresse}.\parDer erzeugte Code selber steht dahinter im Feld \tty{Code} inhexadezimaler Schreibweise. Je nach Prozessortyp und aktuellem Segmentk"onnen die Werte entweder als Bytes oder 16/32-Bit-Worte formatiert sein.Sollte mehr Code erzeugt worden sein, als in das Feld hineinpa"st, sowerden im Anschlu"s an die Zeile weitere Zeilen erzeugt, in denen nurdieses Feld belegt ist.\parIm Feld \tty{Quelle} schlu"sendlich wird die Zeile aus der Quelldatei inihrer Originalform ausgegeben.\parDie Symboltabelle ist so ausgelegt, da"s sie nach M"oglichkeit immer in 80Spalten dargestellt werden kann. F"ur Symbole ,,normaler L"ange'' wirdeine zweispaltige Ausgabe gew"ahlt. Sollten einzelne Symbole mit ihremWert die Grenze von 40 Spalten "uberschreiten, werden sie in einereinzelnen Zeile ausgegeben. Die Ausgabe erfolgt in alphabetischerReihenfolge. Symbole, die zwar definiert, aber nie benutzt wurden,werden mit einem vorangestellten Stern (\verb!*!) gekennzeichnet.\parDie bisher genannten Teile sowie die Auflistung aller definiertenMakros / Funktionen lassen sich selektiv aus dem Gesamtlisting ein-undausblenden, und zwar mit dem bereits erw"ahnten \tty{t}-Kommandozeilenschalter.Intern existiert in AS ein Byte, dessen Bits repr"asentieren, welche Teileausgegeben werden sollen. Die Zuordnung von Bits zu den Teilen ist inTabelle \ref{TabTBits} aufgelistet.\par\begin{table*}[p]\begin{center}\begin{tabular}{|l|l|}\hlineBit & Teil \\\hline\hline0 & Quelldatei(en)+erzeugter Code \\1 & Symboltabelle \\2 & Makroliste \\3 & Funktionsliste \\4 & Zeilennumerierung \\5 & Registersymboltabelle \\7 & Zeichentabellenliste \\\hline\end{tabular}\end{center}\caption{Zuordnung der Bits zu den Listingkomponenten\label{TabTBits}}\end{table*}Defaultm"a"sig sind alle Bits auf 1 gesetzt, bei Verwendung des Schalters\begin{verbatim}-t <Maske>\end{verbatim}werden die in \verb!<Maske>! gesetzten Bits gel"oscht, so da"s die entsprechendenListing-Teile unterdr"uckt werden. Analog lassen sich mit einem Pluszeicheneinzelne Teile wieder einschalten, falls man es in der \tty{ASCMD}-Variablen"ubertrieben hat...will man z.B. nur die Symboltabelle haben, so reicht\begin{verbatim}-t 2 .\end{verbatim}In der Belegungsliste werden f"ur jedes Segment einzeln die belegten Bereichehexadezimal ausgegeben. Handelt es sich bei einem Bereich um eine einzigeAdresse, wird nur diese ausgegeben, ansonsten erste und letzte Adresse.\parIn der Querverweisliste wird f"ur jedes definierte Symbol in alphabetischerReihenfolge eine Ausgabe folgender Form erzeugt:\begin{verbatim}Symbol <Symbolname> (=<Wert>,<Datei>/<Zeile>): Datei <Datei 1>: <n1>[(m1)] ..... <nk>[(mk)] . . Datei <Datei l>: <n1>[(m1)] ..... <nk>[(mk)]\end{verbatim}F"ur jedes Symbol wird aufgelistet, in welchen Dateien es in welchen Zeilenangesprochen wurde. Sollte ein Symbol mehrmals in der gleichen Zeilebenutzt worden sein, so wird dies durch eine in Klammern gesetzte Anzahlhinter der Zeilennummer angedeutet. Sollte ein Symbol niemals benutztworden sein, erscheint es auch nicht in der Liste; entsprechend erscheinteine Datei auch "uberhaupt nicht in der Liste eines Symbols, falls es inder entsprechenden Datei nicht referenziert wurde.\par\bb{ACHTUNG!} AS kann dieses Listing nur dann korrekt aufs Papier bringen,wenn man ihm vorher die L"ange und Breite des Ausgabemediums mit Hilfe des\tty{PAGE}-Befehls (siehe dort) mitgeteilt hat! Der voreingestellteDefault sind 60 Zeilen und eine unbegrenzte Zeilenbreite.%%---------------------------------------------------------------------------\section{Symbolkonventionen}\label{SectSymConv}Symbole d"urfen zwar (wie in der Einleitung bereits angedeutet) bis zu255 Zeichen lang werden und werden auch auf der ganzen L"angeunterschieden, die Symbolnamen m"ussen aber einigen Konventionengen"ugen:\parSymbolnamen d"urfen aus einer beliebigen Kombination von Buchstaben,Ziffern, Unterstrichen und Punkten bestehen, wobei das erste Zeichenkeine Ziffer sein darf. Der Punkt wurde nur zugelassen, um derMCS-51-Notation von Registerbits zu gen"ugen, und sollte m"oglichst nicht ineigenen Symbolnamen verwendet werden. Zur Segmentierung von Symbolnamensollte auf jeden Fall der Unterstrich und nicht der Punkt verwendet werden.\parDefaultm"a"sig ist AS nicht case-sensitiv, es ist also egal, ob manGro"s-oder Kleinbuchstaben verwendet. Mittels des Kommandozeilenschalters\tty{U} l"a"st sich AS jedoch in einen Modus umschalten, in dem Gro"s- undKleinschreibung unterschieden wird. Ob AS umgeschaltet wurde, kann mit demvordefinierten Symbol \tty{CASESENSITIVE} ermittelt werden: TRUE bedeutetUnterscheidung, FALSE keine.\parTabelle \ref{TabPredefined} zeigt die wichtigsten, von AS vordefiniertenSymbole.\begin{table*}[p]\begin{center}\begin{tabular}{|l|l|}\hlineName & Bedeutung \\\hline\hline\tty{TRUE} & logisch ,,wahr'' \\\tty{FALSE} & logisch ,,falsch'' \\\tty{CONSTPI} & Kreiszahl Pi (3.1415.....) \\\tty{VERSION} & Version von AS in BCD-Kodierung, \\ & z.B. 1331 hex f"ur Version 1.33p1 \\\tty{ARCHITECTURE} & Zielplattform, f"ur die AS "ubersetzt wurde, \\ & in der Form Prozesor-Hersteller-Betriebssystem \\\tty{DATE} & Datum und \\\tty{TIME} & Zeitpunkt der Assemblierung (Beginn) \\\tty{MOMCPU} & momentan gesetzte Ziel-CPU \\\tty{MOMCPUNAME} & dito, nur als voll ausgeschriebener String \\\tty{MOMFILE} & augenblickliche Quelldatei \\\tty{MOMLINE} & Zeilennummer in Quelldatei \\\tty{MOMPASS} & Nummer das laufenden Durchgangs \\\tty{MOMSECTION} & Name der aktuellen Sektion oder \\ & Leerstring \\\tty{MOMSEGMENT} & Name des mit \tty{SEGMENT} gew"ahlten \\ & Adre"sraumes \\\verb!*!, \$ bzw. \tty{PC} & mom. Programmz"ahler \\\hline\end{tabular}\end{center}\caption{Vordefinierte Symbole\label{TabPredefined}}\end{table*}\bb{VORSICHT!} W"ahrend es im case-insensitiven Modus egal ist,mit welcher Kombination von Gro"s- und Kleinbuchstaben man vordefinierte Symbole anspricht, mu"s man sich im case-sensitivenModus exakt an die oben angegebene Schreibweise (nur Gro"sbuchstaben)halten!\parZus"atzlich definiere
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -