Anteprima
Vedrai una selezione di 4 pagine su 11
Soluzione programmi Assembly, esame "Elettronica" - Prof. Roncella Pag. 1 Soluzione programmi Assembly, esame "Elettronica" - Prof. Roncella Pag. 2
Anteprima di 4 pagg. su 11.
Scarica il documento per vederlo tutto.
Soluzione programmi Assembly, esame "Elettronica" - Prof. Roncella Pag. 6
Anteprima di 4 pagg. su 11.
Scarica il documento per vederlo tutto.
Soluzione programmi Assembly, esame "Elettronica" - Prof. Roncella Pag. 11
1 su 11
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

RET

7. Realizzare una subroutine che converte in BCD il valore binario contenuto nel registro R0, lasciando il

risultato nel registro stesso. Nel caso in cui il dato di partenza non rappresenti un valore rappresentabile in

BCD, il risultato deve essere posto al valore BCD 99.

PUSH R16

PUSH R17

MOV R17, R0

LDI R16, 99

CPI R17, 100

BRGE end

CLR R16

MOV R16, R0

ANDI R16, ob 11110000

SWAP R16

MULI R16,10

ANDI R17, ob 00001111

ADD R16, R17

end: MOV R0, R16

POP R17

POP R 16

RET

8. Realizzare una subroutine che converte in binario le due cifre BCD contenute nel registro R0, lasciando il

risultato nello stesso registro R0. Nel caso in cui il dato di partenza non rappresenti un valore BCD valido, il

risultato deve essere posto a 0.

PUSH R0

PUSH R16

PUSH R17

PUSH R18

LDI R18, 10

MOV R16, R0

ANDI R16, 0x0F

CP R16,R18

BRGE nv

MOV R17,R0

ANDI R17, 0XF0

SWAP R17

CP R17, R18

BRGE nv

MUL R17, R18

ADD R17, R16

MOV R0, R17

restore:

POP R18

POP R17

POP R16

POP R0

RET

nv: CLR R0

RJUMP restore

9. Realizzare una subroutine che esegue l’operazione di modulo 7 sul valore binario rappresentato su 2 byte,

contenuto in memoria a partire dall’indirizzo in X, lasciando il risultato in R0.

PUSH R16

PUSH R17

PUSH R0

LD R16, X+

LD R17,X

ciclo1: SUBI R17, 7

CPI R17, 7

BRGE ciclo1

MULI R17, 4

ciclo2: SUBI R17, 7

CPI R17, 7

BRGE ciclo2

ciclo3: SUBI R16,7

CPI R16, 7

BRGE ciclo3

ADD R16, R17

compare: CPI R16,7

BRGE ultimo

10. Realizzare una subroutine che valuta il numero di occorrenze di un valore a 16 bit (contenuto nel puntatore

Z), nel vettore di 8 valori da 16 bit contenuto nella memoria dati estesa in locazioni consecutive a partire

dall’indirizzo contenuto n X. Il risultato viene lasciato in R0.

PUSH R16

PUSH R20

PUSH R21

CLR R0

LDI R16, 8

loop:

LD R20,X+

LD R21, X+

CP R20, ZL

CPC R21, ZH

BRNE diversi

INC R0

diversi:

DEC R16

BRNE loop

SBIW XH:XL, 16

POP R21

POP R20

POP R16

RET

11. Realizzare una subroutine che inverte la posizione dei bit del puntatore a 16 bit contenuto in Z. la subroutine

deve lasciare inalterati tutti gli altri registri.

PUSH R16

ROR ZL

LDI R16,8

loop:

ROL ZH

ROR ZL

DEC R16

BRNE loop

POP R16

RET

12. Realizzare una subroutine che traspone la matrice di byte di dimensioni 3x3, collocate in memoria dati

estesa a partire dall’indirizzo contenuto in Z. la matrice trasposta sostituisce la matrice originale.

PUSH R16

PUSH R17

LDD R16, Z+1

LDD R17, Z+3

STD Z+3, R16

STD Z+1, R17

LDD R16, Z+2

LDD R17, Z+6

STD Z+6, R16

STD Z+2, R17

LDD R16, Z+5

LDD R17, Z+7

STD Z+7, R16

STD Z+5, R17

POP R17

POP R16

RET

13. Realizzare un sottoprogramma in grado di scrivere il valore contenuto in R0 in un certo numero (contenuto

in R1) di locazioni di memoria consecutive a partire da quella puntata in x. Il valore R1=0 deve essere

interpretato come 256.

PUSH R1

PUSH XL

PUSH XH

loop:

ST X+, R0

DEC R1

BRNE loop

POP XH

POP XL

POP R1

RET

14. Realizzare un sottoprogramma in grado di determinare quante volte il valore a 16 bit contenuto in X si

ritrova nelle 32 locazioni consecutive a partire da quella puntata da Y. Il risultato deve essere lasciato in R0.

PUSH R16

PUSH R20

PUSH R21

CLR R0

LDI R16, 31

loop:

LD R20, Y+

LD R21, Y

CP R20, XL

CPC R21, XH

BRNE diversi

INC R0

diversi:

DEC R16

BRNE loop

SBIW YH:YL, 31

POP R21

POP R20

POP R16

RET

15. Realizzare una subroutine che scambia la posizione dei bit pari e dispari di R0. Sono scambiati tra loro il bit 0

e il bit 1, il bit 2 e il bit 3 e così via.

PUSH R16

PUSH R17

MOV R16, R0

MOV R17, R0

ANDI R16, ob 01010101

ANDI R17, ob 10101010

LSL R16

LSR R17

OR R16, R17

MOV R0,R16

POP R17

POP R18

RET

16. Scrivere un sottoprogramma che salvi il contenuto del registro SP nelle locazioni di memoria consecutive a

partire dall’indirizzo 0X4000. La parte bassa dello stack pointer è salvata nella locazione con indirizzo minore.

PUSH R24

PUSH R25

LDS R24, CPU_SPL

LDS R25,CPU_SPH

ADIW R25:R24, 5

STS 0X4000, R24

STS 0X4000, R25

POP R25

POP R24

RET

17. Scrivere un sottoprogramma che determina quante volte appaiono i caratteri i cui codici sono dati nei

registri R16 e R17 in una stringa di 128 caratteri consecutivi contenuta nella memoria dati estesa.

PUSH R18

PUSH R19

PUSH R20

CLR R18

LDI R19, 128

loop: LD R20, X+

CP R20, R16

BRNE l1

INC R18

l1: CP R20, R17

BRNE l2

INC R18

l2: DEC R19

BRNE loop

ST Y, R18

SBIW XH:XL, 60

SBIW XH:XL, 60

SBIW XH:XL, 8

POP R20

POP R19

POP R18

RET

18. Scrivere un sottoprogramma che riscrive in ordine inverso una stringa di n caratteri (n è contenuta in R0)

collocate in memoria estesa a partire dall’indirizzo presente in X.

PUSH R16

PUSH R17

PUSH XL

PUSH XH

PUSH YL

PUSH YH

PUSH R18

PUSH R19

CLR R17

MOV R16, R0

CPI R16, 1

BRLE fine

LSR R16

MOV YL, XL

MOV YH, XH

ADD YL, RO

ADC YH, R17

loop:

LD R18, X

LD R19, -X

ST X+, R19

DEC R16

BRNE loop

fine: POP R19

POP R 18

POP YH

POP YL

POP XH

POP XL

POP R17

POP R16

RET

19. Scrivere un sottoprogramma che valuta la somma con segno di n numeri interi (n>0 è contenuto in R0) da 1

byte, collocati in memoria estesa a partire dall’indirizzo presente in X.

PUSH R0

PUSH R16

PUSH R17

PUSH R18

PUSH R19

PUSH XL

PUSH XH

CLR R18

CLR R19

loop:

LD R16, X+

CLR R17

TST R16

BRPL poi

SER R17

poi: ADD R18,R16

ADC R19, R17

DEC R0

BRNE loop

ST Y+, R18

ST Y, R19

SBIW YL, 1

POP XH

POP XL

POP R19

POP R18

POP R 17

POP R 16

POP R0

20. Scrivere un sottoprogramma che determina il numero totale di bit a 1 contenuti nelle 31 locazioni

consecutive di memoria a partire da quella puntata da X e lo lascia in R0.

PUSH R1

PUSH R16

PUSH R17

PUSH R18

CLR R0

CLR R1

LDI R16,31

loop1:

LDI R17, 8

LD R18, X+

loop2:

LSR R18

ADC R0, R1

DEC R17

BRNE loop2

DEC R16

BRNE loop1

SBIW XH:XL, 31

POP R18

POP R17

POP R1

RET

21. Scrivere un sottoprogramma che determina se la somma dei primi 16 byte consecutive di memoria, a partire

da quello puntato da X, è maggiore, uguale o minore di quella dei successive 16. Il risultato viene lasciato nei

flag Z e C.

PUSH R16

PUSH R18

PUSH R19

PUSH R20

PUSH R21

PUSH R22

PUSH R23

CLR R19

CLR R20

CLR R21

CLR R22

CLR R23

LDI R16, 16

loop1: LD R18, X+

ADD R20, R18

ADC R21, R19

DEC R16

BRNE loop1

LDI R16, 16

loop2:

LD R18, X+

ADD R22, R18

ADC R23, R19

DEC R16

BRNE loop2

SBIW XH:XL, 32

CP R20, R22

CPC R20, R22

POP R23

POP R22

POP R21

POP R20

POP R19

POP R18

POP R16

RET

Dettagli
Publisher
A.A. 2015-2016
11 pagine
SSD Ingegneria industriale e dell'informazione ING-INF/01 Elettronica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Ing_bio di informazioni apprese con la frequenza delle lezioni di Elettronica e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Pisa o del prof Roncella Roberto.