summaryrefslogtreecommitdiff
path: root/info/examples/ltt/lstfloat.tex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /info/examples/ltt/lstfloat.tex
Initial commit
Diffstat (limited to 'info/examples/ltt/lstfloat.tex')
-rw-r--r--info/examples/ltt/lstfloat.tex134
1 files changed, 134 insertions, 0 deletions
diff --git a/info/examples/ltt/lstfloat.tex b/info/examples/ltt/lstfloat.tex
new file mode 100644
index 0000000000..5eb69a35a6
--- /dev/null
+++ b/info/examples/ltt/lstfloat.tex
@@ -0,0 +1,134 @@
+\documentclass[twocolumn,a4paper,10pt]{report}
+\usepackage{german,lstfloat,nofloat}
+\begin{document}
+
+\tableofsources
+
+\newpage
+\noindent Das folgende Listing~\ref{querlis} illustriert die Verwendung von Maschinensprache
+zur Bestimmung der Quersumme einer Zahl. Als Beispiel wird die Kodierung im
+Assembler der Prozessoren der 68000-Serie gezeigt.
+
+\begin{source}
+\caption[Quersumme]{Das Beispiel zeigt ein Programm, das die Quersummer einer im Register D2
+"ubergebenen (Dezimal-) Zahl berechnet. Die Quersumme wird durch sukzessives Dividieren
+durch 10 und Addieren des Divisionsrestes gebildet. Da der DIVU-Befehl nur einen 16~Bit-Quotienten
+(bis max. 65536) zul"a"st, kann nicht der gesamte Umfang des 32~Bit-Registers genutzt werden
+(was bis zu 10 Dezimalstellen bedeutete), sondern nur max. 5 Ziffern. Die Quersumme
+findet man in D0.\label{querlis}}
+\addcomment{Berechnet die Quersumme der Zahl im Register D2.}
+\begin{code}
+ move.w #34056, d2 ; Quersumme
+ moveq #4, d1 ; von 34056
+ clr.l d0
+1$: divu #10, d2
+ move.l d2, d3
+ andi.l #$ffff, d2
+ lsr.l #8, d3 ; Divisionsrest
+ ; in Bits 31:16
+ lsr.l #8, d3 ; ins untere
+ ; Byte schieben
+ add.w d3, d0
+ dbra d1, 1$
+ rts
+\end{code}
+\end{source}
+
+\noindent Betrachten wir nun einen Auszug aus einem Objektcodelisting.
+In Listing~\ref{primlist} sehen wir das dazugeh"orende
+Programm als NOFLOAT-Objekt gesetzt. Innerhalb
+dieses Objektes darf ein Seiten- oder
+Spaltenumbruch stattfinden, es wird jedoch die
+Formatierung der caption's beibehalten.
+
+\begin{nofloat}{source}
+\caption{Der Objektcode des Primzahlentesters in Listings~\ref{primlist}. Die
+Routine kann als Unterprogramm angesprungen werden.}
+\addcomment{Der Objectcode der nachfolgenden
+Routine zur "Uberpr"ufung der Zahl im Register D6.}
+\begin{code}
+7C1B ; move.l #27, d6
+6102 ; bsr.s prim_test
+4E75 ; rts
+2406 ; move.l d6,d2
+E24A ; lsr.w #1, d2
+0042 0001 ; ori.w #1, d2
+2206 ; move.l d6, d1
+82C2 ; divu d2, d1
+0281 FFFF ; andi.l #$ffff, d1
+6700 0010 ; beq non_prim
+5542 ; subq.w #2, d2
+B47C 0003 ; cmp.w #3, d2
+6C00 FFEA ; bge loop
+7000 ; moveq #0, d0
+4E75 ; rts
+7001 ; moveq #1, d0
+4E75 ; rts
+\end{code}
+\end{nofloat}
+
+\noindent Das Listing mit dem Objektcode steht in keinem Zusammenhang mit dem ersten
+Assemblerlisting und dient lediglich der Demonstration des Listing-Befehls.
+
+\begin{figure}[h]
+\centering\fbox{\rule{4cm}{0mm}\rule{0mm}{5cm}}
+\caption{Diese Abbildung ist blo"s ein Test, um zu beweisen, da"s die normale
+Formatierung Legenden unber"uhrt geblieben ist!}
+\end{figure}
+
+
+\begin{source*}
+\caption{Primzahlentest\label{primlist}}
+\addcomment{Pr"uft, ob die Zahl in D6 prim ist oder nicht.}
+Das Unterprogramm testet, ob eine in D6 "ubergebene 16-Bit-Zahl prim ist (D0=0) oder
+nicht (D0=1).
+\begin{code}
+start: move.l #27, d6 ; n=27
+ bsr.s prim_test
+ rts
+prim_test: move.l d6,d2
+ lsr.w #1, d2 ; n/2
+ ori.w #1, d2 ; mache D2 ungerade
+loop: move.l d6, d1
+ divu d2, d1 ; teste auf Teiler von D1
+ andi.l #$ffff0000, d1
+ beq non_prim
+ subq.w #2, d2 ; immer in 2er-Schritten
+ cmp.w #3, d2
+ bge loop
+prim: moveq #0, d0
+ rts
+non_prim: moveq #1, d0
+ rts
+\end{code}
+\end{source*}
+
+Schlie"slich sollen Sie in Listing~\ref{quer} noch erfahren, wie einfach die Quersumme einer gegebenen
+Zahl ermittelt werden kann.
+
+\begin{source*}
+\caption{Quersumme\label{quer}}
+\addcomment{Berechnet die Quersumme der Zahl im Register D2.}
+Das n"achste Beispiel zeigt ein Programm, das die Quersummer einer im Register D2
+"ubergebenen (Dezimal-) Zahl berechnet. Die Quersumme wird durch sukzessives Dividieren
+durch 10 und Addieren des Divisionsrestes gebildet. Da der DIVU-Befehl nur einen 16~Bit-Quotienten
+(bis max. 65536) zul"a"st, kann nicht der gesamte Umfang des 32~Bit-Registers genutzt werden
+(was bis zu 10 Dezimalstellen bedeutete), sondern nur max. 5 Ziffern. Die Quersumme
+findet man in D0.
+\begin{code}
+move.w #34056, d2 ; Quersumme von 34056
+ moveq #4, d1
+ clr.l d0
+1$: divu #10, d2
+ move.l d2, d3
+ andi.l #$ffff, d2
+ lsr.l #8, d3 ; Divisionsrest in Bits 31:16
+ lsr.l #8, d3 ; ins untere Byte schieben
+ add.w d3, d0
+ dbra d1, 1$
+ rts
+\end{code}
+\end{source*}
+
+
+\end{document}