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*
 
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