(L30 1) Ulteriori Istruzioni
(L30 1) Ulteriori Istruzioni
(L30 1) Ulteriori Istruzioni
A.A. 2019-2020
• 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”
• 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
• 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
• CMPM
E’ l’unica variante della CMP che consente confronti con
entrambi gli operandi in memoria
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.
• 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