Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2012
    Messaggi
    18

    [assembly MC68000] Elementi in un range di valori

    Salve a tutti,
    vi chiedo un aiuto per risolvere una parte di un esercizio che mi sta facendo penare.
    Il programma che ho simulato funziona alla perfezione ma come potete notare, mancano le istruzioni (sia nello stack che nell'area dati ho,per ora, escluso i parametri relativi alla posizione) relative all'output della posizione del primo elemento del vettore che è compreso nell'intervallo[MIN,MAX].
    Ed è lì il problema... dato che sto passando in rassegna tutti gli elementi del vettore, se inserisco il controllo della posizione nel ciclo non avrò la posizione del primo vettore che soddisfa la condizione, ma dell'ultimo.

    HELP ME,PLEASE!

    codice:
    *Scrivere una procedura in Assembler MC68000 che riceve in ingresso un vettore di byte
    *e la sua dimensione DIM e restituisce in uscita il numero di elementi compresi (CONT) tra MIN e MAX (estremi inclusi)
    *e restituisce la posizione(POSPRIMO) del primo elemento che rispetta questa condizione.
    *Per la posizione si consideri che il primo elemento parte dalla posizione ZERO.
    *Si utilizzi una procedura con subroutine con passaggio di parametri tramite stack.
    
    *AREA OFFSET PARAMETRI
    CONT_OFF         EQU    10
    DIM_OFF        EQU    08
    V1_OFF        EQU    04
    RIT_OFF        EQU    00
    
    
    *PROGRAMMA PRINCIPALE
                ORG     $8000
    MAIN
            MOVE         CONT,-(A7)
            MOVE        DIM,-(A7)
            MOVE.L    #V1,-(A7)
            JSR        COMPRESO
            MOVE        (A7)+,CONT
    
    
    FINE        JMP        FINE
    
    
    *SUBROUTINE
    COMPRESO    MOVEA.L    RIT_OFF(A7),A3
            MOVEA.L    V1_OFF(A7),A1
            MOVE        DIM_OFF(A7),D0
            MOVE        #0,D2            conta elementi compresi    
    LOOP        MOVE.B    (A1)+,D1
            CMP.B        MAX,D1
            BGT        DIVR
            CMP.B        MIN,D1
            BLT        DIVR        
            ADD        #1,D2
    DIVR        SUB        #1,D0
            BNE        LOOP
            MOVE        D2,CONT_OFF(A7)
            ADDA.L    #CONT_OFF,A7
            JMP        (A3)
    
    
    *AREA DATI
            ORG        $8500
    V1        DC.B        1,-2,-4,7,8,3,10,-3
    DIM        DC.w        8
    MIN        DC.B        -2
    MAX        DC.B        5
    CONT        DS.W        1
            END MAIN
    Ultima modifica di MItaly; 12-11-2013 a 14:30 Motivo: Tag CODE, titolo

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2012
    Messaggi
    18
    Ho anche provato a svolgere l'esercizio completo, posizione del primo vettore compreso, ma ASIMTOOL mi dà il seguente errore :
    POSPRIMO DC.B 3
    ERROR: Symbol value differs between first and second pass

    Vi posto anche l'esercizio completo ma, ahimè, sbagliato


    codice:
    *AREA OFFSET PARAMETRI
    CONT_OFF 		EQU	12
    POSPRIMO_OFF	EQU	10
    DIM_OFF		EQU	08
    V1_OFF		EQU	04
    RIT_OFF		EQU	00
    
    
    *PROGRAMMA PRINCIPALE
    			ORG 	$8000
    MAIN
    		MOVE 		CONT,-(A7)
    		MOVE		POSPRIMO,-(A7)
    		MOVE		DIM,-(A7)
    		MOVE.L	#V1,-(A7)
    		JSR		COMPRESO
    		MOVE		(A7)+,POSPRIMO
    		MOVE		(A7)+,CONT
    
    
    FINE		JMP		FINE
    
    
    *SUBROUTINE
    COMPRESO	MOVEA.L	RIT_OFF(A7),A3
    		MOVEA.L	V1_OFF(A7),A1
    		MOVE		DIM_OFF(A7),D0
    		MOVE		#0,D2			conta elementi compresi	
    		MOVE		#0,D3			mantiene indice posizione
    LOOP		MOVE.B	(A1)+,D1
    		CMP.B		MAX,D1
    		BGT		DIVR
    		CMP.B		MIN,D1
    		BLT		DIVR		
    		ADD		#1,D3	
    		BTST		#0,D3
    		MOVE		D3,POSPRIMO_OFF(A7)		
    		ADD		#1,D2
    DIVR		SUB		#1,D0
    		BNE		LOOP
    		MOVE		D2,CONT_OFF(A7)
    		ADDA.L	#CONT_OFF-2,A7
    		JMP		(A3)
    
    
    *AREA DATI
    		ORG		$8500
    V1		DC.B		1,-2,-4,7,8,3,10,-3
    DIM		DC.W		8
    MIN		DC.B		-2
    MAX		DC.B		5
    CONT		DS.W		1
    POSPRIMO	DC.B		3		
    		END MAIN
    Ultima modifica di MItaly; 12-11-2013 a 14:29

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2012
    Messaggi
    18
    Nessuno può darmi una mano? Anche senza scrivere il codice, almeno il ragionamento di base che mi permette di prendere la posizione del primo elemento del vettore che rientra nel range di valori, io riesco a farlo all'interno del ciclo for ma purtroppo in questo modo mi dà la posizione dell'ultimo elemento che soddisfa la condizione.
    UN AIUTINO?????

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.