Pemrograman santai dengan assembler 8051

Setelah pembuatan list edge untuk kecerdasan buatan robot dalam bahasa C++, dan kemudian bahasa Perl, kemudian bahasa C, serta Python , akhirnya saya coba juga buat dalam bahasa assembly untuk mikrokontroler 8051.

Berikut ini listing program assembly:


; deklarasi parameter input
M 		EQU 	8
N 		EQU 	9
X 		EQU 	10	; variabel untuk iterasi
Y 		EQU 	11
NODE	EQU		12
OUTPUT	EQU	20h	; alamat output array

; R0 sebagai index node
; R1 sebagai alamat output
start:
	MOV	SP,#80h	; pindahkan stack pointer supaya ada tempat untuk menaruh variabel
; inisialisasi data
	MOV	M,#4
	MOV	N,#4
; inisialisasi index output
	MOV R1,#OUTPUT
; bikin loop variabel x
	MOV Y,#0
LOOP_Y:
	MOV X,#0
LOOP_X:
; hitung indeks nomor node (y * m + x)
	MOV	A,Y
	MOV B,M
	MUL AB
	ADD A,X
;	MOV R0,A	; simpan indeks di R0
	MOV NODE,A	; simpan nomor node
;	MOV @R1,A	; simpan nomor index
;	INC R1
; kasus pertama bukan di sisi bawah (Y!=0)
; ada edge dengan tetangga yang di bawahnya
KASUS_1:
	MOV A,Y
	JZ KASUS_2
; lakukan perhitungan kasus 1
		;neighbor = (y - 1) * m + x;
	MOV A,Y	; Y => A
	DEC A	;
	MOV B,M	;
	MUL AB	;
	ADD A,X	;
			; simpan hasil, pakai pointer R1
	MOV @R1,NODE				; simpan dulu nomor node nya
	INC R1	; naikkan pointer untuk simpan node number
	MOV @R1,A	; simpan nomor tetangganya
	INC R1	; siapkan untuk data berikut
; kasus kedua, bukan di sisi kanan (!(x == (m - 1)))
KASUS_2:
	MOV A,M
	DEC A
	CLR C
	SUBB A,X
	JZ KASUS_3	; bukan kasus 2, langsung cek kasus 3
; neighbor = y * m + (x + 1)
	MOV A,Y
	MOV B,M
	MUL AB
	ADD A,X
	INC A
	; simpan hasil , pakai pointer R1
	MOV @R1,NODE	; simpan nomor node
	INC R1
	MOV @R1,A	; simpan neigbor
	INC R1
; kasus ketiga, bukan di sisi atas (!(y == (n - 1)))
KASUS_3:
	MOV A,N
	DEC A
	CLR C
	SUBB A,Y
	JZ KASUS_4
; hitung kasus ketiga: 	neighbor = (y + 1) * m + x;
	MOV A,M
	MOV B,X
	MUL AB
	ADD A,Y
	INC A
	MOV @R1,NODE
	INC R1
	MOV @R1,A

KASUS_4:	; kasus keempat, bukan di sisi kiri (x != 0)
	MOV A,X
	JZ AKHIR_CEK
; hitung kasus keempat: neighbor = y * m + (x - 1);
	MOV A,Y
	MOV B,M
	MUL AB
	ADD A,X
	DEC A
	MOV @R1,NODE
	INC R1
	MOV @R1,A
AKHIR_CEK:		

	INC	X			; X++
	MOV A,M			; cek apakah nilai X sudah sama dengan M
	CJNE A,X,LOOP_X

	INC Y			; Y++
	MOV A,N			; cek apakah nilai Y sudah sama dengan N
	CJNE A,Y,LOOP_Y
LOOP:
	JMP LOOP

Puyeng ? Iya lah, namanya juga bahasa assembler🙂 Berikut ini output program, masih dalam skrinsut:

Cara membacanya menyusul🙂 untuk sementara silakan dibandingkan dengan output program C:

0: 1 4
1: 2 5 0
2: 3 6 1
3: 7 2
4: 0 5 8
5: 1 6 9 4
6: 2 7 10 5
7: 3 11 6
8: 4 9 12
9: 5 10 13 8
10: 6 11 14 9
11: 7 15 10
12: 8 13
13: 9 14 12
14: 10 15 13
15: 11 14

Nyambung khan ? hehe. Moga-moga tidak mengurangi semangat kita semua untuk memprogram dalam bahasa assembler.

13 thoughts on “Pemrograman santai dengan assembler 8051

  1. Santai lah, kan tiap tahun saya mengajar mata kuliah sistem mikroprosesor. Salah satu yang diajarkan adalah bahasa assembler 8051, jadi tentu saja masih ingat bahasa assembler. Yang agak susah ini kalau mau pakai assembler 8086, musti bongkar-bongkar manual dulu.

  2. output dari assembler kan sudah byte code, gak rame dong. Nampaknya musti langsung ke register level, pakai VHDL/Verilog. Kalau sudah beres baru masuk ke level transistor🙂

  3. ngeri ya mas!!!
    mas, kalaw yang baru pertama kenal bahasa assembler!! yang kita pelajari apa ya mas!!
    saya ngga’ kuliah ato apa tapi saya mo belajar ndiri….
    thanks

    • Serius nih pengen bisa belajar assembler?
      Ada beberapa hal yang musti jelas dulu:
      * Pengen belajar assembler untuk mikroprosesor apa? Tiap mikroprosesor beda lho bahasa assemblernya.
      * Apakah sudah pernah belajar bahasa pemrograman lain? Lebih mudah belajar assembler kalau anda sebelumnya sudah pernah belajar bahasa pemrograman lain.
      * Apakah anda sanggup membaca buku teks dalam bahasa Inggris? Kebanyakan buku assembler ditulis dalam bahasa Inggris. Ada sih beberapa yang pakai bahasa Indonesia.

  4. Assalamu’alaikum,

    pusiiing, cos bukan jurusannya sih. Ini mah khusus anak yang suka hardware. Saya gak kul di Teknik Komputer & gak dapet bahasa Assembler paling tinggi cuma C, itu pun C nya pake DOS, sebab emang gak ada jurusan Teknik Komputer di kota saya, hik..hik…
    Tapi mas Waskita bisa ajarin ?

    Wassalam.

    • Bahasa assembler hanya diperlukan kalau memang mau kerja pakai mikrokontroler. Kalau gak ngerti assembler, bisa juga koq pakai bahasa C, lebih mudah & cepat membuatnya. Biasanya di mikrokontroler assembler hanya dipakai di sistem-sistem yang perlu pemrosesan sangat cepat.

  5. Assalamu’alaikum
    Mau nanya.
    Kalau mcu’nya pake kluaran Winbond programnya sama dengan 8051 kbanyakan gag yah. Sya punya banyak IC seri W78E051C bekasan nmu di rongsok.
    Kira2 klo month dibikin jam digital 6 digit tanpa RTC gambaran programnya gimana ya. ?
    Trims

    Wassalam

Tinggalkan Balasan

Please log in using one of these methods to post your comment:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s