deskripsi instruksi pada at89sxx

DESKRIPSI SINGKAT INSTRUKSI-INSTRUKSI PADA AT89S51
(Dikemas oleh : Sumarna, Jurdik Fisika, FMIPA, UNY
No.

Instruksi

1.

ADD A,Rn

2.

ADD A,nH

3.

ADD A,@Rn

4.

ADD A,#n


5.

ADDC A,Rn

6.

ADDC A,nH

7.

ADDC A,@Rn

8.

ADDC A,#n

9.

SUBB A,Rn


10.

SUBB A,nH

11.

SUBB A,@Rn

12.

SUBB A,#n

13.
14.

INC A
INC Rn

E-mail : sumarna@uny.ac.id)


Deskripsi
Menambahkan isi A dengan isi Rn dan hasilnya disimpan di A
(n = 0, 1, …, 7)
Menambahkan isi A dengan isi lokasi memori yang alamatnya n dan
hasilnya disimpan di A
Menambahkan isi A dengan data yang ada di alamat yang ditunjukkan
oleh isi Rn dan hasilnya disimpan di A
Menambahkan isi A dengan sebuah konstanta n dan hasilnya disimpan
di A
Menambahkan isi A beserta carry flag dan isi Rn dan hasilnya disimpan
di A (n = 0, 1, …, 7)
Menambahkan isi A beserta carry flag dan isi lokasi memori yang
alamatnya n dan hasilnya disimpan di A
Menambahkan isi A beserta carry flag dengan data yang ada di alamat
yang ditunjukkan oleh isi Rn dan hasilnya disimpan di A
Menambahkan isi A beserta carry flag dengan sebuah konstanta n
dan hasilnya disimpan di A
Mengurangi data di A beserta carry flag-nya dengan isi Rn dan hasilnya
disimpan di A

Mengurangi data di A beserta carry flag-nya dengan isi lokasi yang
alamatnya n dan hasilnya disimpan di A
Mengurangi isi dari A beserta carry flag-nya dengan data yang ada di
alamat yang ditunjukkan oleh isi Rn dan hasilnya disimpan di A
Mengurangi data di A beserta carry flag-nya dengan sebuah konstanta
n dan hasilnya disimpan di A
Menambah data yang ada di A dengan 1 dan hasilnya disimpan di A
Menambah data yang ada di Rn dengan 1 dan hasilnya disimpan di Rn

Contoh
ADD A,R7
ADD A,30H
ADD A,@R0
ADD A,#05h
ADDC A,R7
ADDC A,30H
ADDC A,@R0
ADDC A,#05h
SUBB A,R0
SUBB A,30H

SUBB A,@R0
SUBB A,#05h
INC A
INC R0

15.

INC nH

16.

INC @Rn

17.

INC DPTR

18.
19.
20.


DEC A
DEC Rn
DEC nH

21.

DEC @Rn

22.

MUL AB

23.

DIV AB

24.

DA A


25.

ANL A,Rn

26.

ANL A,nH

27.

ANL A,@Rn

28.

ANL A,#n

29.

ANL nH,A


30.

ANL nH,#n

Menambahkan 1 kepada data yang ada di lokasi yang alamatnya n
dan hasilnya disimpan di alamat tersebut
Menambahkan 1 kepada data yang ada di lokasi yang alamatnya
ditunjukkan oleh isi Rn dan hasilnya disimpan di alamat tersebut
Menambahkan 1 kepada data yang ada di DPTR dan hasilnya
disimpan di DPTR
Mengurangi data yang ada di A dengan 1 dan hasilnya disimpan di A
Mengurangi data yang ada di Rn dengan 1 dan hasilnya disimpan di Rn
Mengurangi dengan 1 kepada data yang ada di lokasi yang alamatnya
n dan hasilnya disimpan di alamat tersebut
Mengurangi dengan 1 kepada data yang ada di lokasi yang alamatnya
ditunjukkan oleh isi Rn dan hasilnya disimpan di alamat tersebut
Mengalikan isi A dan isi register B, hasil perkalian disimpan di A untuk
byte rendah dan untuk byte tinggi disimpan di B. Jika hasil perkalian
melebihi 0FF H, maka flag overflow-nya akan di-set.

Membagi data di A dengan data di B yang hasil baginya disimpan di A
dan sisa pembagiannya disimpan di B. Flag overflow dan carry akan
selalu clear. Jika isi B adalah 0, maka flag overflow di-set.
Mengubah data di A menjadi bentuk BCD. Instruksi ini biasa digunakan
sesudah instruksi ADD.
Melakukan operasi logik AND antara isi A dan isi Rn dan hasilnya
disimpan di A
Melakukan operasi AND antara isi A dan isi lokasi yang alamatnya n
dan hasilnya disimpan di A
Melakukan operasi AND antara isi A dan isi lokasi yang alamatnya
ditujukkan oleh isi dari R0 atau R1 dan hasilnya disimpan di A
Melakukan operasi AND antara isi A dengan suatu konstanta n dan
hasilnya disimpan di A
Melakukan operasi AND antara isi dari lokasi yang alamatnya n
dengan isi A dan hasilnya disimpan di lokasi (alamat n) tersebut
Melakukan operasi AND antara isi dari lokasi yang alamatnya n
dengan suatu konstanta n dan hasilnya disimpan di lokasi (alamat n)

INC 30H
INC @R5

INC DPTR
DEC A
DEC R2
DEC 30H
DEC @R7
MUL AB

DIV AB

ADD A,#05h
DA A
ANL A,R3
ANL A,30H
ANL A,@R0
ANL A,#08h
ANL 07H,A
ANL 07H,#05h

31.


ORL A,Rn

32.

ORL A,nH

33.

ORL A,@Rn

34.

ORL A,#n

35.

ORL nH,A

36.

ORL nH,#n

37.

XRL A,Rn

38.

XRL A,nH

39.

XRL A,@Rn

40.

XRL A,#n

41.

XRL nH,A

42.

XRL mH,#n

43.
44.
45.
46.

CLR A
CPL A
RL A
RLC A

47.

RR A

tersebut (alamat n dan konstanta n tidak harus sama)
Melakukan operasi logik OR antara isi A dan isi Rn dan hasilnya
disimpan di A
Melakukan operasi OR antara isi A dan isi lokasi yang alamatnya n
dan hasilnya disimpan di A
Melakukan operasi OR antara isi A dan isi lokasi yang alamatnya
ditujukkan oleh isi dari R0 atau R1 dan hasilnya disimpan di A
Melakukan operasi OR antara isi A dengan suatu konstanta n dan
hasilnya disimpan di A
Melakukan operasi OR antara isi dari lokasi yang alamatnya n
dengan isi A dan hasilnya disimpan di lokasi (alamat n) tersebut
Melakukan operasi OR antara isi dari lokasi yang alamatnya n
dengan suatu konstanta n dan hasilnya disimpan di lokasi (alamat n)
tersebut (alamat n dan konstanta n tidak harus sama)
Melakukan operasi logik EX-OR antara isi A dan isi Rn dan hasilnya
disimpan di A
Melakukan operasi EX-OR antara isi A dan isi lokasi yang alamatnya
n dan hasilnya disimpan di A
Melakukan operasi EX-OR antara isi A dan isi lokasi yang alamatnya
ditujukkan oleh isi dari R0 atau R1 dan hasilnya disimpan di A
Melakukan operasi EX-OR antara isi A dengan suatu konstanta n
dan hasilnya disimpan di A
Melakukan operasi EX-OR antara isi dari lokasi yang alamatnya n
dengan isi A dan hasilnya disimpan di lokasi (alamat n) tersebut
Melakukan operasi EX-OR antara isi dari lokasi yang alamatnya m
dengan konstanta n dan hasilnya disimpan di lokasi (m) tersebut
Membuat isi akumulator A menjadi 0 (nol).
Mengkomplemen setiap bit isi akumulator A
Menggeser ke kiri 1 (satu) bit pada setiap bit isi akumulator A
Menggeser ke kiri 1 (satu) bit pada setiap bit isi akumulator A beserta
carry flag-nya
Menggeser ke kanan 1 (satu) bit pada setiap bit isi akumulator A

ORL A,Rn
ORL A,30H
ORL A,@R0
ORL A,#05h
ORL 30H,A
ORL 30H,#05h

XRL A,R2
XRL A,30H
XRL A,@R1
XRL A,#05h
XRL 30H,A
XRL 30H,#05h
CLR A
CPL A
RL A
RLC A
RR A

48.

RRC A

49.

SWAP A

50.
51.
52.

MOV A,Rn
MOV A,nH
MOV A,@Rn

53.
54.
55.
56.
57.
58.
59.

MOV A,#n
MOV Rn,A
MOV Rn,nH
MOV Rn,#n
MOV nH,A
MOV nH,Rn
MOV mH,nH

60

MOV nH,@Rn

61.
62.

MOV nH,#n
MOV @Rn,A

63.

MOV @Rn,nH

64.

MOV @Rn,#n

65.
66.

MOV DPTR,#nn
MOVC A,@A+DPTR

67.

MOVC A,@A+PC

68.

MOVX A,@Rn

Menggeser ke kanan 1 (satu) bit pada setiap bit isi akumulator A
beserta carry flag-nya
Melalukan operasi penukaran nibble tinggi dan nibble rendah di dalam
akumulator A
Memindahkan data dari register Rn ke akumulator A
Memindahkan data dari lokasi yang alamatnya n ke akumulator A
Memindahkan data dari lokasi yang alamatnya ditunjukkan oleh isi
register R0 atau R1 ke akumulator A
Mengisi akumulator A dengan suatu konstanta (data) n
Memindahkan data dari akumulator A ke register Rn
Memindahkan data dari lokasi yang alamatnya n ke register Rn
Mengisi register Rn dengan suatu konstanta (data) n
Memindahkan data dari akumulator ke suatu lokasi yang alamatnya n
Memindahkan data dari register Rn ke suatu lokasi yang alamatnya n
Memindahkan data dari suatu lokasi yang alamatnya n ke lokasi lain
yang alamatnya m
Memindahkan data dari suatu lokasi yang alamatnya ditunjukkan oleh
isi register R0 atau R1 ke suatu lokasi yang alamatnya n
Mengisikan suatu konstanta n (data) ke suatu lokasi yang alamatnya n
Memindahkan data dari A ke satu lokasi yang alamatnya ditunjukkan
oleh isi register R0 atau R1
Memindahkan data dari suatu lokasi yang alamatnya n ke lokasi lain
yang alamatnya ditunjukkan oleh isi register R0 atau R1
Mengisikan suatu konstanta n (data) ke suatu lokasi yang alamatnya
ditunjukkan oleh isi register R0 atau R1
Mengisi register DPTR dengan suatu konstanta 16 bit
Memindahkan data dari memori program yang lokasinya ditunjukkan
oleh isi DPTR ditambah indeks akumulator A menuju ke A
Memindahkan data dari memori program yang lokasinya ditunjukkan
oleh isi Program Counter ditambah indeks akumulator A menuju ke A
Memindahkan data dari memori eksternal yang alamatnya ditunjukkan
oleh Rn ke akumulator A

RRC A
SWAP A
MOV A,R3
MOV A,30H
MOV A,@R0
MOV
MOV
MOV
MOV
MOV
MOV
MOV

A,#05h
R5,A
R7,30H
R6,#05h
30H,A
30H,R6
10H,30H

MOV 30H,@R0
MOV 30H,#05h
MOV @R1,A
MOV @R1,30H
MOV @Rn,#05h
MOV DPTR,#2000h
MOVC A,@A+DPTR
MOVC A,@A+PC
MOVX A,@R0

69.

MOVX A,@DPTR

70.

MOVX @Rn,A

71.

MOVX @DPTR,A

72.
73.

PUSH n
POP n

74.

XCH A,Rn

75.

XCH A,nH

76.

XCH A,@Rn

77.

XCHD A,@Rn

78.
79.

CLR C
CLR bit

80.
81.

SETB C
SETB bit

82.
83.

CPL C
CPL bit

84.

ANL C,bit

85.

ANL C,/bit

86.

ORL C,/bit

Memindahkan data dari memori eksternal yang alamatnya ditunjukkan
oleh DPTR ke akumulator A
Memindahkan data dari akumulator A ke memori eksternal yang
alamatnya ditunjukkan oleh Rn
Memindahkan data dari akumulator A ke memori eksternal yang
alamatnya ditunjukkan oleh DPTR
Menyimpan data dari suatu register atau memori ke dalam stack
Mengambil data dari dalam stack dan dikembalikan ke suatu register
atau memori
Menukar data yang tersimpan di akumulator A dengan data yang ada
di register Rn
Menukar data yang tersimpan di akumulator A dengan data yang ada
di suatu lokasi yang alamatnya n
Menukar data yang tersimpan di akumulator A dengan data yang ada
di suatu lokasi yang alamatnya ditunjukkan oleh isi R0 atau R1
Menukar data nibble rendah di akumulator A dengan data nibble
rendah di suatu lokasi yang alamatnya ditunjukkan oleh isi R0 atau R1
Mengubah bit carry flag menjadi 0 (nol)
Mengubah bit pada RAM internal atau register yang dapat dialamati
secara bit menjadi 0 (nol)
Mengubah bit carry flag menjadi 1 (satu)
Mengubah bit pada RAM internal atau register yang dapat dialamati
secara bit menjadi 1 (satu)
Melakukan komplemen pada bit carry flag
Melakukan komplemen bit memori atau register yang dapat dialamati
secara bit
Melakukan operasi logik AND antara bit carry flag dan bit pada register
atau memori yang dapat dialamati secara bit
Melakukan operasi AND antara bit carry flag dengan komplemen dari
bit pada register atau memori yang dapat dialamati secara bit
Melakukan operasi OR antara bit carry flag dengan komplemen dari
bit pada register atau memori yang dapat dialamati secara bit

MOVX A,@DPTR
MOVX @R0,A
MOVX @DPTR,A
PUSH A
POP B
XCH A,R7
XCH A,70H
XCH A,@R0
XCHD A,@R0
CLR C
CLR P1.2
SETB C
SETB A.7
CPL C
CPL A.6
ANL C,B.5
ANL C,/A.7
ORL C,/A.7

87.

MOV C,bit

88.

MOV bit,C

89.

JC rel

90.

JNC rel

91.

JB bit,rel

92.

JNB bit,rel

93.

JBC bit,rel

94.

CALL Addr

95.

ACALL Addr

96.

LCALL Addr-16

97.
98.

RET
RETI

99.

AJMP Addr

100. LJMP Addr-16

Memindahkan bit pada register atau memori yang dapat dialamati
secara bit ke bit carry flag
Memindahkan bit carry flag ke bit pada register atau memori yang
dapat dialamati secara bit
Melompat ke suatu alamat yang didefinisikan oleh rel jika carry flagnya set
Melompat ke suatu alamat yang didefinisikan oleh rel jika carry flagnya clear
Melompat ke suatu alamat yang didefinisikan oleh rel jika bit dari
register atau memori yang dapat dialamati secara bit dalam keadaan
set
Melompat ke suatu alamat yang didefinisikan oleh rel jika bit dari
register atau memori yang dapat dialamati secara bit dalam keadaan
clear
Melompat ke suatu alamat yang didefinisikan oleh rel jika bit dari
register atau memori yang dapat dialamati secara bit dalam keadaan
set, tetapi bit tersebut di-clear setelah lompatan dilakukan
Memanggil subroutine yang ditunjuk oleh alamat pada Addr atau
tanda label
Memanggil subroutine yang ditunjuk oleh alamat pada Addr atau
tanda label. Lompatan pemanggilan sejauh 2 K byte
Memanggil subroutine yang ditunjuk oleh alamat pada Addr atau
tanda label. Lompatan pemanggilan sejauh 64 K byte
Kembali ke alamat yang disimpan dalam SP dan SP-1
Kembali ke alamat yang disimpan dalam SP dan SP-1 dan
mengembalikan kondisi flag-flag interrupt agar interupsi berikutnya
dengan prioritas yang sama dapat dilakukan
Melompat dan menjalankan program yang berada di alamat yang
ditentukan oleh Addr (11 bit dari alamat pada Addr dipindahkan ke
PC)
Melompat dan menjalankan program yang berada di alamat yang
ditentukan oleh Addr (16 bit dari alamat pada Addr dipindahkan ke

MOV C,A.0
MOV A.1,C
JC Loop
JNC Loop
JB P1.0,Loop

JNB P1.0,Loop

JBC A.7,Loop

Call

Delay

Acall 35H
Acall Loop
LCALL Loop
RET
RETI

AJMP Loop

LJMP Loop

101. SJMP rel
102. JMP @A+DPTR
103. JZ rel
104. JNZ rel
105. CJNE A,nH,rel

106. CJNE A,#n,rel
107. CJNE Rn,#n,rel
108. CJNE @Rn,#n,rel

109. DJNZ Rn,rel
110. DJNZ nH,rel

111. NOP

PC)
Melompat ke alamat yang ditentukan oleh rel dengan lompatan
maksimum 128 byte
Melompat ke alamat yang dihasilkan oleh penjumlahan antara DPTR
dan akumulator A
Melompat ke alamat yang ditentukan oleh rel jika akumulator A sama
dengan 0 (nol)
Melompat ke alamat yang ditentukan oleh rel jika akumulator A adalah
tidak sama dengan 0 (nol)
Membandingkan isi A dengan isi lokasi yang alamatnya n dan
melompat ke alamat yang ditentukan oleh rel jika hasil perbandingan
tidak sama
Membandingkan isi A dengan suatu konstanta n dan melompat ke
alamat yang ditentukan oleh rel jika hasil perbandingan tidak sama
Membandingkan isi register Rn dengan suatu konstanta n dan
melompat ke alamat yang ditentukan oleh rel jika hasil perbandingan
tidak sama
Membandingkan data yang terletak pada suatu lokasi yang alamatnya
ditunjukkan oleh isi R0 atau R1 dengan suatu konstanta n dan
melompat ke alamat yang ditentukan oleh rel jika hasil perbandingan
tidak sama
Mengurangi isi Rn dengan 1 dan melompat ke alamat yang ditentukan
oleh rel jika hasilnya belum 0 (nol)
Mengurangi dengan 1 kepada isi suatu lokasi yang alamatnya n dan
melompat ke alamat yang ditentukan oleh rel jika hasilnya belum 0
(nol)
Melakukan penundaan (delay) pada program sebesar 1 cycle tanpa
mempengaruhi isi register-register dan flag.

SJMP Awal
JMP @A+DPTR
JZ Loop
JNZ Loop
CJNE A,30H,Loop

CJNE A,#05h,Loop
CJNE R6,#05h,Loop

CJNE @R0,#05h,Loop

DJNZ R7,Loop
DJNZ 30H,Loop

NOP