Differences

This shows you the differences between two versions of the page.

wiki:study:prakt:emr [2005/08/19 12:36] (current)
Line 1: Line 1:
 +[[http://www.theoinf.tu-ilmenau.de/ra1/skripte/emr/]]
 +<code asm>
 +; * **************************************************************************************
 +; *
 +; *  PRAKTIKUM "PROGRAMMIERUNG DER EMR-FAMILIE C166"
 +; *  -----------------------------------------------
 +; *
 +; * zur Lehrveranstaltung "Einchipmikrorechner und Signalprozessoren"
 +; *                                Bernd Daene    TU Ilmenau    5/2004
 +; *
 +; *
 +; *  ----- AUFGABE 1: BYTES TAUSCHEN ----
 +; *
 +; * In dieser Datei sollen Sie eine Assemblerprozedur implementieren, welche
 +; * die in einer 16-Bit-Zahl enthaltenen Bytes miteinander vertauscht. Der
 +; * Tausch soll nur dann ausgefuehrt werden, wenn das hoeherwertige (linke)
 +; * Byte einen groesseren Zahlenwert hat als das niederwertige (rechte) Byte!
 +; *
 +; * Alle Zahlen sind vorzeichenlose ganze Binaerzahlen.
 +; *
 +; * Das Argument befindet sich zu Beginn in R12. Der Rueckgabewert muss zum
 +; * Ende in R4 stehen. Das Register R0 darf KEINESFALLS veraendert werden.
 +; * Die sonstigen allgemeinen Register sind frei verwendbar.
 +*snip snap*
 +
 + MOV R4,R12
 + MOV R1,R12
 + CMPB RL4,RH4
 + JMPA cc_NC, NOSWAP;(RL4-RH4)>=0?
 + MOVB RL4,RH1
 + MOVB RH4,RL1
 + NOSWAP:
 +
 +*snip snap*
 +</code>
 +
 +<code asm>
 +; * **************************************************************************************
 +; *
 +; *  PRAKTIKUM "PROGRAMMIERUNG DER EMR-FAMILIE C166"
 +; *  -----------------------------------------------
 +; *
 +; * zur Lehrveranstaltung "Einchipmikrorechner und Signalprozessoren"
 +; *                                Bernd Daene    TU Ilmenau    5/2004
 +; *
 +; *
 +; *  ----- AUFGABE 2: FELD MIT VIELFACHEN EINER ZAHL FUELLEN ----
 +; *
 +; * In dieser Datei sollen Sie eine Assemblerprozedur implementieren, welche
 +; * einen Speicherbereich der Laenge l mit den Vielfachen einer Zahl n fuellt.
 +; * Alle Zahlen sind vorzeichenbehaftete 16-Bit-Zahlen. Der Zahlenwert fuer l
 +; * ist stets groesser als Null.
 +; *
 +; * Die Argumente ergeben sich aus unten stehender Tabelle. Ein Rueckgabewert
 +; * existiert nicht. Das Register R0 darf KEINESFALLS veraendert werden.
 +; * Die sonstigen allgemeinen Register sind frei verwendbar.
 +*snip snap*
 +
 + MOV R11,R13
 +NEXT_WORD:
 + MOV [R14],R13
 + ADD R14,#2
 +
 + ADD R13,R11
 +
 + CMPD1 R12,#2 ;(R12==2)?...;R12--;
 + JMPA cc_NC,NEXT_WORD
 +
 +*snip snap*
 +</code>
 +
 +<code asm>
 +; * **************************************************************************************
 +; *
 +; *  PRAKTIKUM "PROGRAMMIERUNG DER EMR-FAMILIE C166"
 +; *  -----------------------------------------------
 +; *
 +; * zur Lehrveranstaltung "Einchipmikrorechner und Signalprozessoren"
 +; *                                Bernd Daene    TU Ilmenau    5/2004
 +; *
 +; *
 +; *  ----- AUFGABE 3: QUADRATWURZEL ----
 +; *
 +; * In dieser Datei sollen Sie eine Assemblerprozedur implementieren, welche
 +; * aus einer vorzeichenlosen 32-Bit-Zahl den ganzzahligen Teil der Quadrat-
 +; * wurzel berechnet und als vorzeichenlose 16-bit-Zahl zurueckgibt.
 +; *
 +; * Als Berechnungsverfahren wird das Prinzip der sukzessiven Approximation
 +; * empfohlen. Sie finden es am Ende dieser Datei naeher erlaeutert. Andere
 +; * Berechnungsverfahren sind aber auch moeglich.
 +; *
 +; * Das Argument befindet sich zu Beginn in R12 (niederwertiger Teil) und R13
 +; * (hoeherwertiger Teil). Der Rueckgabewert muss zum Ende in R4 stehen.
 +; *
 +; * Das Register R0 darf KEINESFALLS veraendert werden.
 +; * Die sonstigen allgemeinen Register sind frei verwendbar.
 +*snip snap*
 +
 + MOV R1,#8000h ;i=15
 + MOV R4,#0 ;y=0
 +
 +NEXT_BIT:
 + ;MOV R3,R4 ;
 + OR R4,R1 ;R3|=R1
 +
 + MULU R4,R4 ;y*y
 +;32 bit SUB
 + SUB MDL,R12 ;
 + SUBC MDH,R13 ;z=y*y-x
 + JMPA cc_Z,DONE ;0=y*y-x
 + JMPA cc_C,BIT_OK ;0<y*y-x
 + XOR R4,R1 ;reset y
 +BIT_OK:
 + SHR R1,#1
 + JMPA cc_NC,NEXT_BIT
 +DONE:
 +
 +*snip snap*
 +
 +</code>
 
wiki/study/prakt/emr.txt · Last modified: 2005/08/19 12:36 (external edit)
 
Except where otherwise noted, content on this wiki is licensed under the following license:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki