MODUL KE
11
Sistem Mikroprosesor (3 sks)
MATERI KULIAH :Perancangan program sederhana untuk sistem mikroprosesor dalam bahasa rakitan (assembly) untuk menjumlahkan/mengurangkan dua bilangan heksa pada dua lokasi berbeda, menjumlahkan/mengurangkan lebih dari dua bilangan heksa pada beberapa lokasi alamat berbeda, serta program sederhana (penjumlahan dan pengurangan) sebagai pengantar program menggunakan looping.
POKOK BAHASAN :
Desain Program Sederhana
untuk Sistem Mikroprosesor dalam
Bahasa Rakitan (Assembly)
Oleh Ir. INDRAGUNG PRIYAMBODO, MT.
11.1 PROGRAM UNTUK PENJUMLAHAN/PENGURANGAN DUA
BILANGAN HEKSA PADA DUA LOKASI BERBEDA
Misalnya untuk menjumlahkan bilangan heksadesimal yang disimpan di dua lokasi/alamat yang berbeda.
Sebagai contoh :
LATIHAN 11.1
Program sistem mikroprosesor (dalam bahasa rakitan/assembly) untuk menjumlahkan dua bilangan heksadesimal yang masing-masing berada di alamat 50H dan alamat 51H, kemudian hasil penjumlahannya disimpan di alamat 52H.
Atau dapat juga dengan kalimat, untuk menjumlahkan isi dari alamat 50H dan 51H, kemudian hasilnya disimpan di alamat 52H, serta diasumsikan bahwa hasil penjumlahannya tidak menghasilkan carry.
SOLUSI :
Persoalan tersebut dapat ditulis secara sederhana seperti berikut ini.
(50H) + (51H) 52H
Untuk tahap awal, langkah-langkah penyelesaiannya seperti berikut ini. 1. Masukkan isi alamat 50H ke Accumulator (Register A)
2. Amankan data di Acc. (isi alamat 50H) ke Register B
3. Masukkan data berikutnya (isi alamat 51H) ke Accumulator (ke Reg. A)
4. Jumlahkan data di Acc. (A) = (50H) dengan data di Reg. B (= isi alamat 51H), dan hasilnya langsung disimpan di Acc. (A).
5. Pindahkan/Copykan data di Acc (A) ke alamat 52H. Dengan demikian programnya seperti berikut ini.
ALTERNATIF 11.1.1
Byte Kode Operasi
Instruksi
(Mnemonic) Deskripsi (Artinya) 3 1 3 1 3 1 3A 47 3A 80 32 76 LDA MOV LDA ADD STA HLT 50H B, A 51H B 52H (50H) A ; Jadi (A) = (50H)
(A) B ; Jadi (B) = (50H), diamankan (51H) A ; Jadi (A) = (51H)
(A) + (B) A ; (A) = (50H) + (51H) (A) 52H ; (52H) = (A) = (50H)+(51H) Stop program ini
12 Byte membutuhkan 12 lokasi untuk program, misalnya dari 00 H s/d 0B H
Bila ditulis lengkap dengan lokasi alamat beserta isinya dalam hexadesimal seperti berikut ini. Alamat Memori (Heksadesimal) Instruksi (Mnemonic) Isi Memori (Heksadesimal) 00 01 02 03 04 05 06 07 08 09 0A 0B LDA MOV LDA ADD STA HLT 50H B, A 51H B 52H 3A 50 00 47 3A 51 00 80 32 52 00 76
ALTERNATIF 11.1.2
Alternatif lainnya adalah menggunakan LXI, dan selanjutnya isi dari HL dinaikkan terus. Cara ini terlihat diawalnya lebih sulit, tetapi untuk penjumlahan berulang-ulang menjadi jauh lebih mudah dan dapat diarahkan ke bentuk looping.
Berikut ini adalah alternatif 11.1.2 Byte Kode
Operasi
Instruksi
(Mnemonic) Deskripsi (Artinya) 3 1 1 1 1 1 1 21 7E 23 86 23 77 76 LXI MOV INX ADD INX MOV HLT H, 50H A, M H M H M, A 50H HL ; Jadi (HL) = 0050 H = M (M=(HL)=50H) A ; (A) = (M) = (50H) (HL) + 1 HL ; (HL) = 0051 H = M (A)+(M=51H) A; ( A)=(50H)+(51H) (HL) + 1 HL ; (HL) = 0052 H = M (A)M=52H; (52H)=(A)=(50H)+(51H) Stop program ini
9 Byte membutuhkan 9 lokasi untuk program, misalnya dari 00 H s/d 08 H
Bila ditulis lengkap dengan lokasi alamat beserta isinya dalam hexadesimal seperti berikut ini. Alamat Memori (Heksadesimal) Instruksi (Mnemonic) Isi Memori (Heksadesimal) 00 01 02 03 04 05 06 07 08 LXI MOV INX ADD INX MOV HLT H, 50H A, M H M H M, A 21 50 00 7E 23 86 23 77 76
ALTERNATIF 11.1.3
Alternatif ini sama dengan alternatif 11.1.2, tetapi saat memindahkan/meng-copykan data dari Accumulator ke alamat 52H, langsung mengggunakan STA 52H.
Berikut ini adalah alternatif 11.1.3 Byte Kode
Operasi
Instruksi
(Mnemonic) Deskripsi (Artinya) 3 1 1 1 3 1 21 7E 23 86 32 76 LXI MOV INX ADD STA HLT H, 50H A, M H M 52H 50H HL ; Jadi (HL) = 0050 H = M (M=(HL)=50H) A ; (A) = (M) = (50H) (HL) + 1 HL ; (HL) = 0051 H = M (A)+(M=51H) A; ( A)=(50H)+(51H) (A)52H; (52H)=(A)=(50H)+(51H) Stop program ini
10 Byte membutuhkan 10 lokasi untuk program, misalnya dari 00 H s/d 09 H Bila ditulis lengkap dengan lokasi alamat beserta isinya dalam hexadesimal seperti berikut ini. Alamat Memori (Heksadesimal) Instruksi (Mnemonic) Isi Memori (Heksadesimal) 00 01 02 03 04 05 06 07 08 09 LXI MOV INX ADD STA HLT H, 50H A, M H M 52H 21 50 00 7E 23 86 32 50 00 76
Ternyata walaupun kesan pertamanya program tersebut lebih pendek, ternyata tidak demikian, justru tetap lebih panjang, dan lebih lama eksekusinya.
LATIHAN SOAL
S.13.1.1 Desainlah program sistem mikroprosesor menggunakan bahasa rakitan/assembly untuk mengurangkan dua bilangan heksadesimal yang berada di lokasi alamat 51H dengan bilangan di lokasi 52H, kemudian hasilnya disimpan di alamat di alamat 53 H, serta diasumsikan bahwa hasilnya tidak negatif.
11.2 PROGRAM UNTUK PENJUMLAHAN/PENGURANGAN LEBIH
DARI DUA BILANGAN HEKSA DI BEBERAPA LOKASI BERBEDA
Misalnya untuk menjumlahkan bilangan heksadesimal yang disimpan di lima lokasi/alamat yang berbeda.
Sebagai contoh :
LATIHAN 11.2.
Program sistem mikroprosesor (dalam bahasa rakitan/assembly) untuk menjumlahkan lima bilangan heksadesimal yang masing-masing berada di alamat 41H s/d 45H, kemudian hasil penjumlahannya disimpan di alamat 46H.
Atau dapat juga dengan kalimat, untuk menjumlahkan isi dari alamat 41H dan 45H, kemudian hasilnya disimpan di alamat 46H, serta diasumsikan bahwa hasil penjumlahannya tidak menghasilkan carry.
SOLUSI :
Persoalan tersebut dapat ditulis secara sederhana seperti berikut ini.
(41H) + (42H) + (43H) + (44H) + (45H) 46H
Dengan demikian programnya seperti berikut ini.
ALTERNATIF 11.2.1
Byte Kode Operasi
Instruksi
(Mnemonic) Deskripsi (Artinya) 3 1 3 1 1 3 1 1 3 1 1 3 1 3 1 3A 47 3A 80 47 3A 80 47 3A 80 47 3A 80 32 76 LDA MOV LDA ADD MOV LDA ADD MOV LDA ADD MOV LDA ADD STA HLT 41H B, A 42H B B, A 43H B B, A 44H B B, A 45H B 46H (41H) A ; Jadi (A) = (41H)
(A) B ; Jadi (B) = (41H), diamankan (42H) A ; Jadi (A) = (42H)
(A) + (B) A ; (A) = (41H) + (42H) (A) B; Jadi (B) = hasil yg diamankan (43H) A ; Jadi (A) = (43H)
(A) + (B) A ; (A) = hasil tadi + (43H) (A) B; Jadi (B) = hasil yg diamankan (44H) A ; Jadi (A) = (44H)
(A) + (B) A ; (A) = hasil tadi + (44H) (A) B; Jadi (B) = hasil yg diamankan (45H) A ; Jadi (A) = (45H)
(A) + (B) A ; (A) = hasil tadi + (45H) (A) 46H ; (46H) = (41H)+s/d+(45H) Stop program ini
Dari hasil program tersebut, terlihat adanya tiga instruksi berulang yaitu MOV B,A kemudian LDA XXH, dan ADD B.
Program tersebut walaupun berulang, tetapi tidak dapat dibuat looping karena berulangnya tidak persis sama, yaitu adalanya instruksi LDA XXH, nilai XX nya berbeda-beda.
Program tersebut bila ditulis lengkap sesuai format bakunya, dengan lokasi alamat beserta isinya dalam hexadesimal seperti berikut ini.
Alamat Memori (Heksadesimal) Instruksi (Mnemonic) Isi Memori (Heksadesimal) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A LDA MOV LDA ADD MOV LDA ADD MOV LDA ADD MOV LDA ADD STA HLT 41H B, A 42H B B, A 43H B B, A 44H B B, A 45H B 46H 3A 41 00 47 3A 42 00 80 47 3A 43 00 80 47 3A 44 00 80 47 3A 45 00 80 32 46 00 76
ALTERNATIF 11.2.2
Alternatif lainnya adalah menggunakan LXI, dan selanjutnya isi dari HL dinaikkan terus. Cara ini terlihat diawalnya lebih sulit, tetapi dengan penjumlahan berulang-ulang akan menjadi jauh lebih mudah dan dapat diarahkan ke bentuk looping.
Kemudian disini diperkenalkan inisiasi untuk mengosongkan/mengenolkan Accumulator, yaitu menggunakan instruksi
SUB A : (A) – (A) A atau XRA A : (A) exor (A) A
Berikut ini adalah alternatif 11.2.2 Byte Kode
Operasi
Instruksi
(Mnemonic) Deskripsi (Artinya) 1 3 1 1 1 1 1 1 1 1 1 1 1 1 97 21 86 23 86 23 86 23 86 23 86 23 77 76 SUB LXI ADD INX ADD INX ADD INX ADD INX ADD INX MOV HLT A H, 41H M H M H M H M H M H M, A
Clear (A) dan Carry
41H HL ; Jadi (HL) = 0041 H = M (A)+(M=41H) A; ( A)=00+(41H) (HL) + 1 HL ; (HL) = 0042 H = M (A)+(M=42H) A; ( A)=(41H)+(42H) (HL) + 1 HL ; (HL) = 0043 H = M (A)+(M=43H) A; ( A)=hasil +(43H) (HL) + 1 HL ; (HL) = 0044 H = M (A)+(M=44H) A; ( A)=hasil +(44H) (HL) + 1 HL ; (HL) = 0045 H = M (A)+(M=45H) A; ( A)=hasil +(45H) (HL) + 1 HL ; (HL) = 0046 H = M (A)M=46H; (46H)=(A)=hasil akhir Stop program ini
16 Byte hanya membutuhkan 16 lokasi untuk program, misalnya 00 H s/d 0F H
Dari hasil program tersebut, terlihat adanya dua instruksi berulang dan SAMA PERSIS yaitu INX H dan ADD M. Dengan adanya pengulangan yang sama persis tersebut, maka program tersebut dapat disederhanakan menggunakan LOOPING. Khusus hal ini akan dibahas kemudian.
Program tersebut bila ditulis lengkap sesuai format bakunya, dengan lokasi alamat beserta isinya dalam hexadesimal seperti berikut ini.
Alamat Memori (Heksadesimal) Instruksi (Mnemonic) Isi Memori (Heksadesimal) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F SUB LXI ADD INX ADD INX ADD INX ADD INX ADD INX MOV HLT A H, 41H M H M H M H M H M H M, A 97 21 41 00 86 23 86 23 86 23 86 23 86 23 77 76
LATIHAN SOAL
Desainlah program sistem mikroprosesor menggunakan bahasa rakitan/assembly untuk melakukan operasi berikut ini.
S.11.2.1 Memindahkan/mengcopykan isi lokasi alamat 41H ke alamat 42 H s/d 46 H. S.11.2.2 Menjumlahkan beberapa bilangan heksadesimal yang berada di lokasi
alamat 51H s/d 5AH, kemudian hasilnya disimpan di alamat di alamat 61 H s/d 63 H, serta diasumsikan bahwa hasil akhirnya tidak mengandung carry. S.11.2.3 Mengurangkan beberapa bilangan heksadesimal yang berada di lokasi
alamat 51H s/d 5AH, kemudian hasilnya disimpan di alamat di alamat 61 H s/d 63 H, serta diasumsikan bahwa hasil akhirnya tidak negatif.
11.3 PROGRAM UNTUK PENJUMLAHAN/PENGURANGAN
BEBERAPA BILANGAN HEKSA DI BEBERAPA LOKASI BERBEDA
DENGAN MENGGUNAKAN LOOPING (JUMP)
Misalnya untuk menjumlahkan bilangan heksadesimal yang disimpan di beberapa lokasi/alamat yang berbeda (dimulai dengan lima lokasi berbeda seperti pada latihan 11.2, kemudian sampai dengan di banyak lokasi alamat.yang berurutan) Sebagai contoh :
LATIHAN 11.3.1
Program sistem mikroprosesor (dalam bahasa rakitan/assembly) untuk menjumlahkan isi alamat 41H s/d 45H, kemudian hasilnya disimpan di alamat 46H, serta diasumsikan bahwa hasil penjumlahannya tidak menghasilkan carry. Kemudian informasi tentang banyaknya bilangan yang dijumlahkan berada di alamat 40H, ini berarti isi alamat 40H adalah 05.
SOLUSI :
Persoalan tersebut seperti pada latihan sebelumnya, dapat ditulis secara sederhana seperti berikut ini.
(40H) = 05 H
(41H) + (42H) + (43H) + (44H) + (45H) 46H
Dengan demikian programnya seperti berikut ini.
ALTERNATIF 11.3.1.1
Byte Kode Operasi
Instruksi
(Mnemonic) Deskripsi (Artinya) 1 3 1 1 1 1 3 3 1 97 21 46 23 86 05 C2 32 76 JUML : SUB LXI MOV INX ADD DCR JNZ STA HLT A H, 40H B, M H M B JUML 46H
Clear (A) dan Carry
40H HL ; Jadi (HL) = 0040 = M (M=(HL)) B; (B)=05, sebagai counter (HL) + 1 HL ; (HL) = 0041 = M (A) + (M=41) A
(B) – 1 B ; Isi B berkurang 1
Jump jika (B) ≠ 0 Jump if ZERO = 0 (A) 46H
15 Byte membutuhkan 15 lokasi untuk program, misalnya dari 00 H s/d 0E H
Bila ditulis lengkap dengan lokasi alamat beserta isinya dalam hexadesimal seperti berikut ini. Alamat Memori (Heksadesimal) Instruksi (Mnemonic) Isi Memori (Heksadesimal) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E JUML : SUB LXI MOV INX ADD DCR JNZ STA HLT A H, 40H B, M H M B JUML 46H 97 21 40 00 46 23 86 05 C2 05 00 32 46 00 76
Yang perlu diingat adalah :
Jump Not Carry selalu berpasangan dengan suatu nilai !
Pengertian sederhananya dari JNZ JUML adalah : Bila isi B ≠ 0 maka akan loncat/jump ke alamat 05 H (tempat tanda JUML tersebut).
Kemudian instruksi STA 46H, dapat diganti denganinstruksi yang lebih cepat (pendek), yaitu INX H dilanjutkan dengan MOV M,A
Sebagai bahan latihan, berikut ini diberikan alternatif lainnya untuk solusi program nomor 1, misalnya anda tidak boleh menggunakan instruksi JNZ, tetapi boleh MENGGUNAKAN INSTRUKSI JZ, seperti berikut ini.
Byte Kode Operasi
Instruksi
(Mnemonic) Deskripsi (Artinya) 1 3 1 1 1 3 1 3 1 3 1 97 21 46 23 86 32 05 CA 23 C3 76 JUML: STOP : SUB LXI MOV INX ADD STA DCR JZ INX JMP HLT A H, 41H B, M H M 46H B STOP H JUML
Clear (A) dan Carry
41H HL ; Jadi (HL) = 0041 H = M (M = (HL)) B ; sebagai counter (HL) + 1 HL ; (HL) = 0042 H = M (A) + (M) A
(A) 46H; Hasil akhir
(B) – 1 B ; Isi B berkurang 1
Jump jika (B) = 0 Jump if ZERO = 1 (HL) + 1 HL ; (HL) = 0043 H = M Jump to JUML
Stop program ini
19 Byte membutuhkan 19 lokasi untuk program, misalnya dari 00 H s/d 12 H Bila ditulis lengkap dengan lokasi alamat beserta isinya dalam hexadesimal seperti berikut ini. Alamat Memori (Heksadesimal) Instruksi (Mnemonic) Isi Memori (Heksadesimal)
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 JUML: STOP : SUB LXI MOV INX ADD STA DCR JZ NX JMP HLT A H, 41H B, M H M 46H B STOP H JUML 97 21 41 00 46 23 86 32 46 00 05 CA 12 00 23 C3 06 00 76
ALTERNATIF 11.3.1.3
Sebagai bahan latihan, jika informasi tentang banyaknya data yang dijumlahkan tidak disimpan di suatu lokasi/alamat, dalam hal ini tidak disimpan di alamat 40H. Maka harus langsung dimasukkan ke dalam mikroprosesor, dalam hal ini langsung dimasukkan ke suatu register dengan instruksi MVI.
Byte Kode Operasi
Instruksi
(Mnemonic) Deskripsi (Artinya) 1 2 3 1 1 1 3 3 1 97 06 21 23 86 05 C2 32 76 JUML : SUB MVI LXI INX ADD DCR JNZ STA HLT A B, 05H H, 40H H M B JUML 46H
Clear (A) dan Carry
05H B; (B)=05, sebagai counter 40H HL ; Jadi (HL) = 0040 = M (HL) + 1 HL ; (HL) = 0041 = M (A) + (M=41) A
(B) – 1 B ; Isi B berkurang 1
Jump jika (B) ≠ 0 Jump if ZERO = 0 (A) 46H
16 Byte membutuhkan 16 lokasi untuk program, misalnya dari 00 H s/d 0F H Bila ditulis lengkap dengan lokasi alamat beserta isinya dalam hexadesimal seperti berikut ini. Alamat Memori (Heksadesimal) Instruksi (Mnemonic) Isi Memori (Heksadesimal) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F JUML : SUB MVI LXI INX ADD DCR JNZ STA HLT A B, 05H H, 40H H M B JUML 46H 97 06 05 21 40 00 23 86 05 C2 06 00 32 46 00 76
LATIHAN 11.3.2
Program sistem mikroprosesor (dalam bahasa rakitan/assembly) untuk menjumlahkan isi alamat 43H s/d 7AH, kemudian hasilnya disimpan di alamat 40H, serta diasumsikan bahwa hasil penjumlahannya tidak menghasilkan carry.
SOLUSI :
Persoalan tersebut seperti pada latihan sebelumnya, dapat ditulis secara sederhana seperti berikut ini.
(43H) + ... + (7AH) 40H
Terlebih dahulu harus dihitung banyaknya bilangan atau lokasi yang dijumlahkan, yaitu = 7AH – 43H + 1H = 28 H.
lokasi 42H.
Dengan demikian programnya seperti berikut ini.
Byte Kode Operasi
Instruksi
(Mnemonic) Deskripsi (Artinya) 1 2 3 1 1 1 3 3 1 97 06 21 23 86 05 C2 32 76 JUML : SUB MVI LXI INX ADD DCR JNZ STA HLT A B, 28H H, 42H H M B JUML 40H
Clear (A) dan Carry
28H B; (B)=28, sebagai counter 42H HL ; Jadi (HL) = 0042 = M (HL) + 1 HL ; (HL) = 0043 = M (A) + (M=43) A
(B) – 1 B ; Isi B berkurang 1
Jump jika (B) ≠ 0 Jump if ZERO = 0 (A) 40H
Stop program ini
16 Byte membutuhkan 16 lokasi untuk program, misalnya dari 00 H s/d 0F H Bila ditulis lengkap dengan lokasi alamat beserta isinya dalam hexadesimal seperti berikut ini. Alamat Memori (Heksadesimal) Instruksi (Mnemonic) Isi Memori (Heksadesimal)
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F JUML : SUB MVI LXI INX ADD DCR JNZ STA HLT A B, 28H H, 42H H M B JUML 40H 97 06 28 21 42 00 23 86 05 C2 05 00 32 40 00 76
LATIHAN SOAL
Desainlah program sistem mikroprosesor menggunakan bahasa rakitan/assembly untuk melakukan operasi berikut ini.
S.11.3.1 Menjumlahkan isi alamat 2DH s/d 62H serta diasumsikan bahwa hasil penjumlahannya tidak menghasilkan carry, kemudian hasilnya disimpan di : a. di alamat 2CH.
b. di alamat 63H s/d 7A H.
S.11.3.2 Mengurangkan isi alamat 2DH s/d 62H (jadi (2DH) – (2EH) – (2FH) dst.nya), serta diasumsikan bahwa hasil akhir pengurangannya bukan bilangan negatif. Kemudian hasilnya disimpan di :
a. di alamat 2CH.
b. di alamat 63H s/d 7A H.
S.11.3.3 Menjumlahkan isi alamat 52H s/d 70H serta diasumsikan bahwa hasil penjumlahannya tidak menghasilkan carry, kemudian hasilnya disimpan di
alamat 60H s/d 69 H. Tetapi sebelum hasil penjumlahan tadi disimpan di alamat 60 H s/d 69 H, maka data yang ada di alamat tersebut (di 60 H s/d 69 H) harus diamankan terlebih dahulu ke alamat 91 H s/d 9A H.
DAFTAR PUSTAKA
[1] Lance A. Leventhal, Introduction to Microprocessors : Software, Hardware,
Programming, Prentice Hall,1978.
[2] Pasahow, Edward, J. , Microprocessor and Microcomputer Interfacing for
Electronics Technicians, McGraw-Hill, New York, 1981.
[3] Chris H. Pappas dan Willian H. Murray III, 80386 Mikroprocessor Handbook, Osborne McGraw-Hill, 1988
[4] Avtar Singh dan Walter A. Triebel, The 8088 Microprocessor : Programmnig,
Interfacing, Software, Hardware, and Applications, Prentice Hall, International
Editions, 1989
[5] Charles M.Gilmore , Microprocessors:Principles and Applications, Glencoe/McGraw-Hill, 2nd International Ed. , 1995
[6] Rodnay Azks (alih bahasa : S.H. Nasution), From Chips to Systems : An
Introduction to Microprocessors ( Dari Chip ke Sistem : Pengantar Mikroprosesor),
Sybec Inc., 1981 (Penerbit Erlangga, 1986).
[7] Harry Garland (alih bahasa : M. Barmawi dan M.O. Tjia), Introduction to
Microprocessor System Design ( Pengantar Desain Sistem Mikroprosesor),
McGraw-Hill Inc., 1979 (Penerbit Erlangga, 1984).
[8] Barry B. Brey , Microprocessors and Peripherals : Hardware,Software,Interfacing,