MC 68000

di il
3 risposte

MC 68000

Salve, gentilmente qualcuno conosce un buon sito o una buona guida per codesto linguaggio? Mi servirebbe per l esame di CE1 all uni. Comelibri ho quello di hamacher ma alcune cose le spiega in maniera confusionaria. Grazie
PS: HO svolto un programma per esercitarmi. Converte una stringa in maiuscolo sottraendo 32 al codice ASCII delle lettere minuscole
	ORG	$8000
START	MOVE.L	#STRINGA,A0
CICLO	TST	(A0)
	BEQ	FINECICLO
	CMP.B	#'a',(A0)
	BLE	NONCONV
	CMP.B	#'z',(A0)
	BHI	NONCONV
	SUB.B	#32,(A0)
NONCONV	ADDA	#1,A0
	BRA	CICLO
FINECICLO	STOP	#$2000

	ORG	$8800
STRINGA	DC.B	'OGGI,6 NOVEMBRE',0
	END	START
	
	
mi chiedo: se inverto l'indirizzo di partenza e tipo faccio org 8000 nel secondo e 8800 nella prima parte cosa cambia? grazie

3 Risposte

  • Re: MC 68000

    Quelli sono gli indirizzi del codice e dei dati. Dato che sono utilizzati dei simboli, non cambia niente, è il compilatore a risolvere gli indirizzi correttamente.
  • Re: MC 68000

    Ok grazie mille se non disturbo volevo inoltre chiederti nel seguente frammento di codice
    
    * Area Programmi
    		ORG		$8000
    START		MOVE.W	#3,D0			Copia A in D0
    		MOVE.W	#5,D1			Copia B in D1
    		SUBQ.L	#2,SP			Alloca sullo stack una word per contenere il risultato C
    		MOVE.W	D1,-(SP)		Push di B sullo stack
    		MOVE.W	D0,-(SP)		Push di A sullo stack
    		JSR		SOMMA		Salta alla subroutine aspettandosi al ritorno di trovare nell'apposita area il risultato
    		MOVE.W	4(SP),D2		Copia il risultato in D2
    		ADD.L		#6,SP			Dealloca lo spazio sullo stack
    		MOVE.W	D2,RES		Copia il risultato in memoria
    		STOP		#$2000		Termina
    	
    * Area Dati
    		ORG		$8800
    RES		DS.W		1			Spazio per contenere il risultato
    
    * Subroutine
    		ORG		$8400
    OFFA		EQU		8		Offset di A rispetto al frame-pointer
    OFFB		EQU		10		Offset di B rispetto al frame-pointer
    OFFC		EQU		12		Offset di C rispetto al frame-pointer
    
    SOMMA	LINK		A6,#0		Imposta il frame-pointer in A6: non alloca spazio per variabili locali
    		MOVE.L	D0,-(SP)	Salva sullo stack il registro D0 per poterlo utilizzare liberamente
    		MOVE.W	OFFA(A6),D0	Copia A in D0
    		ADD.W		OFFB(A6),D0	Addiziona B a D0
    		MOVE.W	D0,OFFC(A6)	Salva il risultato nell'apposita area dello stack
    		MOVE.L	(SP)+,D0	Ripristina il registro D0
    		UNLK		A6		Ripristina il registro A6
    		RTS				Ritorna il controllo al chiamante
    
    		END		START
    
    
    
    
    4(sp),d2 in realtà cosa fa? questo è un pezzo che ho preso da un esercizio online dal sito docenti dell'università non ho ben capito così come non capisco perchè eseguendo i push mi dice che sono di a e b se poi nell'area dati vi sono valori differenti. Non dovrebbe copiare i valori 5 e 3? scusate ma non ci sto capendo niente :/
  • Re: MC 68000

    Ciao
    MOVE.W   4(SP),D2      Copia il risultato in D2
    questa istruzione non fa niente alto che prendere dallo stack la word del risultto e la pone in D2 che se ben ricordo è un registro.
Devi accedere o registrarti per scrivere nel forum
3 risposte