Jumat, 10 Mei 2013

Instruksi Logika Perintah bahasa Assembler

Assembly | ADD, MOVE, JMP, CLR, RET, RJMP, RCALL, RUTIN CEK, Operasi Aritmatika transfer data

Instruksi
Arti
contoh
LDI Rd,K RD = K .d=16-31. K = 0-255
Artinya copy data 8 bit ke GPR (hanya R16~R31).
LDI R16, 0xf
LDI R31,8 //desimal 8
ADD Rd,Rr
Rd = Rd + Rr

LDS Rd,K(LoaD direct to data Space)Rd = isi alamat K , d = 0~31 K = 0~FFFF
Copy isi alamat K ke RD
LDS R20,0×1.copy alamat 0×0001 (R1) ke R20.
STS K, Rr(Store direct To data Space)
Mengcopy isi register Rr ke lokasi memory K
1) STS 0×1 ,R10copy isi R10 ke alamat 0×0001 (R1).2) LDI R16,0×55
STS 0×38,R16 // 0×38(PortB) = 0×55
IN Rd,A
isi GPR dgn memori relatif SFR
IN R20,0×16 (PINB=mem adress 0×36, relatif adress 0×16)
artinya isi R20 = PINB
untuk instruksi IN lebih baik ganti “A” dgn nama
jadi IN R20,0×16 sama dengan IN R20 ,PINB
OUT A,Rr
isi reg i/o dengan Rr
Out PORTD,R10
JMP
spt goto bahasa C
lagi : IN R16, PINB
OUT PORTC,R16
JMP lagi
MOV
Mengcopy data di antara register GPR
MOV R10, R20
Instruksi Operasi Aritmatika


Contoh :
ADD
Menambahkan isi dua register.
add r15,r14 ; r15=r15+r14
ADC
Menambahkan isi dua register dan isi carry flag
adc r15,r14 ; r15=r15+r14+C
SUB
Mengurangi isi dua register.
sub r19,r14 ; r19=r19-r14
MUL
Mengalikan dua register. Perkalian 8 bit dengan 8 bit menghasilkan bilangan 16 bit yang disimpan di r0untuk byte rendah dan di r1 untuk byte tinggi. Untuk memindahkan bilangan 16 bit antar register registerdigunakan instruksi movw (copy register word)
mul r21,r20 ; r1:r0=r21*r20
Instruksi Logika
Instruksi
Arti
Contoh
AND Rm,Rn
Rm=Rm & Rn
AND Rr23,R27
ANDI Rn,kontanta
Rn=Rn & konstanta
ANDI R25,0b11110000
OR
R18 = R18 OR R17
OR R18, R17
ORI
Rn = Rn OR konstanta
ori r15,0xfe
INC
Rn = Rn + 1
INC R16
DEC
Rn = Rn – 1
DEC R16
CLR
Rn = 0
CLR R15 ; R15=0×00
SER
Rn=0xFFh
SER R16 ; r16=0xff
Instruksi I/O
Instruksi
Arti
Contoh
IN
membaca data I/O port ke dalam register
IN R16,PinA
OUT
menulis data register ke I/O port
OUT PortA,R16
LDI(load immediate)
menulis konstanta ke register sebelum konstanta tersebut
LDI R16,0xFF
SBI(set bit in I/O)
membuat logika high pada sebuah bit I/O port
SBI PortB,7
CBI(clear bit in I/O)
membuat logika low pada sebuah bit I/O port
CBI PortB,5
SBIC(skip if bit in I/O is clear)
lompati satu instruksi jika bit I/O port dalam kondisi clear/low
SBIC PortA,3
SBIS(skip if bit in I/O is set)
lompati satu instruksi jika bit I/O port dalam kondisi set/high
SBIS PortB,3
Operasi Percabangan
Instruksi Percabangan
istruksi
arti
contoh
Sbic (skip if bit in I/O is leared)
Skip jika bit I/O yang diuji clear
SBIC PINB,0; Skip if Bit 0 on port B is 0
RJMP ATarget ; Jump to the label ATarget
Sbis (skip if bit in I/O is set)
Skip jika bit I/O yang diuji set
sbrc (skip if bit in register is lear)
Skip jika bit dalam register yang diuji clear
cp (compare)
Membandingkan isi dua register
cp r16,r18 ;brne lompat ;(menuju lompat jika r16=r18)
cpi (compare with immediate)
Membandingakan isi register dengan konstanta tertentu
cpi r16,5 ; r16=5 ?breq lagi ;(menuju lagi jika r16 = 5
breq (branch if equal)
Lompat ke label tertentu jika suatu hasil perbandingan adalah sama
brne (branch if not equal)
Lompat ke label tertentu jika suatu hasil perbandingan adalah tidaksama
rjmp (relative jump)
Lompat ke label tertentu
rcall (relative call)
Memanggil subrutin.
ret (return)
Keluar dari sub rutin.
CPSE(ComPare Skip if Equal)
Compare R1 and R2, skip if equal
CPSE R1,R2

Tidak ada komentar: