http://www.theoinf.tu-ilmenau.de/ra1/skripte/emr/
; * ************************************************************************************** ; * ; * 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*
; * ************************************************************************************** ; * ; * 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*
; * ************************************************************************************** ; * ; * 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*