(L30 1) Ulteriori Istruzioni

Scarica in formato pdf o txt
Scarica in formato pdf o txt
Sei sulla pagina 1di 16

Corso di Calcolatori Elettronici I

A.A. 2019-2020

Linguaggio assembly del


68000. Esempi
Lezione 30

Prof. Roberto Pietrantuono

Università degli Studi di Napoli Federico II


Dipartimento di Ingegneria Elettrica e delle
Tecnologie dell'Informazione
C.d.L. di Ingegneria Informatica
Operazioni di Shift

• Shift logico a sinistra/destra: LSL, LSR


Esempio: LSL.W #2,D2
• Rotazione a sinistra/destra: ROL, ROR
Esempio: ROL #1,D0
• Shift aritmetico a sinistra/destra: ASL, ASR
Esempio: ASR.B #4,D6
Test e Bit-Test

• TST
Verifica se l’operando è negativo o zero, influenzando
opportunamente il registro di stato
Esempio: TST D2
• BTST
Verifica se un determinato bit è 1
Esempio: BTST #1,D0
• BCHG, BCLR, BSET
Testano un bit e, rispettivamente, lo invertono, lo
pongono a 0, lo pongono a 1
Esempio: BCLR #4,D6
Operazioni di scambio

• EXG
Scambia il contenuto di due registri
Esempio: EXG D3,D7

• SWAP
Scambia la parte bassa e la parte alta di un registro
Esempio: SWAP D0
ADD/SUB “Quick”

• Spesso occorre effettuare incrementi/decrementi di


piccole quantità
• Tuttavia, un’istruzione può codificare valori immediati
soltanto con 16 o 32 bit (spreco di memoria)
• ADDQ, SUBQ
• Somma/sottrae un immediato codificabile su tre bit
(valori da 1 a 8, escludendo lo 0, che non serve)
• L’immediato è codificato nei 16 bit dell’istruzione
Esempio: ADDQ #8,D2
SUBQ #7,D6
L’assemblatore sceglie la codifica migliore disponibile
(scrivendo ADD, può scegliere ADDQ invece che ADD).
Operazioni con immediati

• ADDI, SUBI
• Somma/sottrae un immediato ad un operando dest.
Esempio: ADDI #9,D2
• ANDI, ORI, EORI, etc.
• Applica le corrispondenti funzioni logiche
Esempio: ANDI #$FE,(A0)
• CMPI
• Confronta un immediato con un operando destinazione
Esempio: CMPI #100,D6
Moltiplicazione e divisione

• MULU, DIVU
Moltiplica/divide due operandi considerandoli come
unsigned
Esempio: MULU (A2),D2

• MULS, DIVS
Moltiplica/divide due operandi come signed
Esempio: DIVS D3,D2

La moltiplicazione opera sempre su operandi a 16 bit, in


modo che il risultato richieda al massimo 32 bit
Manipolazione Indirizzi

• MOVEA
E’ una MOVE specializzata nel trasferimento di indirizzi
Opera solo su registri Ax
A differenza della MOVE ordinaria, non altera il registro di
stato
Esempio: MOVEA.L #$8100,A7
MOVEA.L A6,A5
• ADDA
Similmente, applica l’addizione su un registro indirizzo
Esempio: ADDA.L #$10,A3
• CMPA
Applica la CMP con un registro indirizzo
Esempio: CMPA.L #$100,A3
Trasferimenti Multipli

• MOVEM
• Trasferisce “in blocco” interi gruppi di registri.
• E’ possibile scegliere un sottoinsieme qualsiasi dei
registri generici Dx/Ax

• Si utilizza in combinazione con una modalità di


indirizzamento con autoaggiornamento
• Esempio:
MOVEM.L D0-D4/A0/A2-A4,-(A7)
MOVEM.L (A7)+,D0-D4/A0/A2-A4
CMPM Compare memory with memory

• CMPM
E’ l’unica variante della CMP che consente confronti con
entrambi gli operandi in memoria

• E’ ammessa solo la modalità di indirizzamento indiretto


con post-incremento

• E’ tipicamente usata per confrontare vettori, ovvero


sequenze di locazioni di memoria tutte della stessa
dimensione

• Esempio: CMPM (A4)+,(A3)+


Bcc: Branch on condition cc (1)

Operation: IF cc = 1 THEN [PC] ← [PC] + d


Syntax: Bcc <label>
Attributes: Bcc takes an 8-bit or 16-bit offset
(displacement)

Description:
If the specified logical condition is met, program execution
continues at location [PC] + displacement, d.
The displacement is a two’s complement value.
The value in the PC corresponds to the current location plus
two.
Bcc: Branch on condition cc (2)

Single bit
BCS branch on carry set C=1
BCC branch on carry clear C=0
BVS branch on overflow set V=1
BVC branch on overflow clear V=0
BEQ branch on equal (zero) Z=1
BNE branch on not equal Z=0
BMI branch on minus (i.e., negative) N=1
BPL branch on plus (i.e., positive) N=0
Signed
BLT branch on less than (zero) N⊕V=1
BGE branch on greater than or equal N⊕V=0
BLE branch on less than or equal (N ⊕ V) + Z = 1
BGT branch on greater than (N ⊕ V) + Z = 0
Unsigned
BLS branch on lower than or same C+Z=1
BHI branch on higher than C+Z=0
BHS=BCC; BLO=BCS
Esempio esito del confronto
$FF è maggiore di $10 se i numeri
sono interpretati come unsigned, in
quanto 255 è maggiore di 16

Tuttavia se i numeri
sono interpretati come signed, $FF è
minore di $10, in quanto -1 è minore di
16.

IL PROCESSORE NON TIENE CONTO DEL TIPO DI


RAPPRESENTAZIONE QUANDO SETTA I FLAG DI
CONDIZIONE
DBcc: test, decrement, and branch
• DBcc
• Fornisce un modo sintetico per gestire i cicli, sostituendo con
un’unica istruzione il decremento di un contatore e la verifica di una
condizione, che normalmente richiedono diverse istruzioni separate.
• Fintantoché la condizione cc rimane falsa, decrementa il registro
Dx fornito all’istruzione, e se questo non era zero prima del
decremento (ovvero se ora non vale -1) salta all’etichetta fornita.
• Negli altri casi, passa all’istruzione seguente.
• Supporta tutti i cc usati in Bcc. Inoltre, ammette anche le forme DBF
e DBT (F = false, e T = true) per ignorare la condizione ed usare
solo il registro di conteggio.
[Dn] ← [Dn] - 1
IF [Dn] >= 0
[PC] ← [PC] + d
Esempio: DBT D0,LOOP ELSE
[PC] ← [PC] + 2
DBcc: decrement, test and branch

Operation: IF(condition false)


THEN [Dn] ← [Dn] - 1 {decrement loop counter}
IF [Dn] =-1 THEN [PC] ← [PC] + 2 {next instruction}
ELSE [PC] ← [PC] + d {take branch}
ELSE [PC] ← [PC] + 2 {fall through to next instruction}
Syntax: DBcc Dn,<label>
Description: The DBcc instruction provides an automatic looping facility and
replaces the usual decrement counter, test, and branch instructions. Three
parameters are required by the DBcc instruction: a
branch condition (specified by ‘cc’), a data register that serves as
the loop down-counter, and a label that indicates the start of the
loop. The 14 branch conditions supported by Bcc are also supported
by DBcc, as well as DBF and DBT (F = false, and T = true). Note
that many assemblers permit the mnemonic DBF to be expressed
as DBRA (i.e., decrement and branch back).
NOTE: the condition tested by DBcc works in the opposite sense to a Bcc
Istruzioni STOP & NOP

• STOP
Modifica il registro di stato e pone il processore in una
condizione di attesa
Sfrutta il meccanismo delle interruzioni
Esempio: STOP #%0010000000010010

• NOP
Non fa nulla!
Esempio: NOP
E’ un’istruzione “vuota”
Può talvolta essere utile per il debug dei programmi, o
per occupare parti dell’area codice con spazio vuoto

Potrebbero piacerti anche