Anda di halaman 1dari 10

9 Pemrograman – Menggunakan Kode Mesin Dan Pertemuan

Kita dapat menggunakan mikroprosesor sebagai bagian dari komputer atau sebagai bagian dari
pengendali proses dinamit dan satu-satunya perbedaan penting adalah di
instruksi yang diberikan.
Karena mikroprosesor tidak memiliki kecerdasan sama sekali, ia sepenuhnya bergantung pada
mengikuti urutan instruksi seperti yang kita diskusikan pada saat menjemput -
jalankan siklus.
Jika Anda sedang duduk di ruang ceramah dan pembicara berkata, "Kami akan
selesaikan sekarang ’, Anda akan tahu bahwa sudah waktunya untuk mengambil bit Anda dan
potongan dan meninggalkan ruangan. Kata-kata itu bukan satu-satunya kemungkinan,
instruksi lain akan memiliki tujuan yang sama seperti, 'Benar,
itu saja, terima kasih '; ‘Kami akan istirahat di sini’; 'Sepertinya ini saat yang tepat untuk a
istirahat'; "Kami akan berhenti pada titik ini dan melanjutkan pada sesi berikutnya", dan
banyak variasi lainnya. Guru dapat menghapus seluruh kelas secara instan
hanya dengan melihat jam mereka dan berkata, 'Yah,. . . ’. Ada secara harfiah
lusinan cara memberitahu orang bahwa sudah waktunya meninggalkan kamar
sebelum beralih ke kemungkinan yang kurang sopan.
Mikroprosesor, di sisi lain, tidak memiliki tingkat seperti ini
fleksibilitas, pada kenyataannya mereka hampir tidak memiliki fleksibilitas sama sekali. Itu sangat
membuat frustrasi, tetapi kami tidak berbagi bahasa yang sama dengan
mikroprosesor (Gambar 9.1).

Setiap mikroprosesor memiliki daftar instruksi bawaan yang dapat dimengerti. Daftar ini disebut 'set
instruksi'
dan dapat terdiri dari sekitar seratus atau lebih instruksi yang harus
disatukan dalam urutan yang benar untuk melaksanakan fungsi yang dibutuhkan. Ini
adalah pekerjaan programmer dan mirip dengan pembangun, membangun a
rumah dengan meletakkan banyak potongan sederhana seperti kayu, ubin, batu bata di
urutan yang benar. Ketika mikroprosesor dirancang, instruksi
decoder mengenali input ini dan memulai proses internal itu
memungkinkan mikroprosesor untuk melaksanakan instruksi. Ini mengandaikan
bahwa mikroprosesor terbiasa dengan instruksi atau, untuk
Dengan kata lain, instruksi dalam bahasa yang dipahami
oleh mikroprosesor tertentu.

Seperti yang telah kita lihat, kita tidak dapat berbicara langsung dengan mikroprosesor dan,
lebih buruk lagi, mikroprosesor sering tidak dapat berbicara langsung satu sama lain
(Gambar 9.2). Ini terutama terjadi ketika mikroprosesor
telah dikembangkan oleh organisasi saingan.
Dalam satu perusahaan, seperti Intel, ada tekanan komersial untuk
memastikan bahwa setiap mikroprosesor yang berhasil memahami biner
kode dari desain sebelumnya. Ini disebut sebagai ‘ke atas
cocok'. Tidak ada yang mencegah perusahaan merancang suatu
mikroprosesor yang memiliki pin dan kemampuan pemrograman yang sama seperti
lain. Z80180 misalnya dirancang sebagai salinan terbaru
Intel Z80 yang, pada gilirannya, merupakan versi revisi 8080A. Dulu
pin untuk pin plug-in pengganti yang kompatibel. Ini mungkin menjengkelkan
desainer asli tetapi diterima asalkan desain internal memiliki
belum disalin. Memang, sering kali perusahaan asli tidak membahayakan.
Jika beberapa mikroprosesor yang kompatibel sedang dijual, ia akan menginduksi
banyak programmer untuk menulis program menggunakan kode ini. Ini akan
meningkatkan penjualan mikroprosesor ini dan, mungkin, tidak ada yang mau
menderita.
Intel Pentium berada di bawah serangan serupa selama 1997/8 dari lainnya
mikroprosesor seperti seri Athlon yang dibuat oleh A.M.D. Ini bisa berjalan
Program Pentium dan, untuk beberapa tujuan, lebih unggul dari
Pentium.

Kode mesin
Kode biner yang dipahami oleh mikroprosesor disebut
kode mesin dan terdiri dari aliran bit biner. Mereka diberi makan
chip memori RAM atau ROM dalam blok 8, 16, 32 atau 64
tergantung pada mikroprosesor yang digunakan. Bagi kami, aliran biner adalah
total omong kosong.
Contoh
Jika kita mengacu pada diagram blok Z80180 pada Gambar 9.3, kita bisa
selidiki instruksi yang diperlukan untuk menambahkan dua angka bersama. Satu
dari angka-angka tersebut sudah tersimpan dalam akumulator atau daftar A. Mari
asumsikan ini adalah angka 25H.
In datang instruksi: 11000110 00010101. Hal ini dalam dua bagian, yang
byte pertama, 11000110, berarti menambahkan nomor berikut ke nomor tersebut
disimpan dalam akumulator. Ini byte pertama yang berisi instruksi
disebut kode operasi, biasanya disingkat menjadi ‘kode op’. Itu
byte kedua, 00010101, adalah angka 15H. Instruksi khusus ini
memiliki dua byte. Beberapa instruksi hanya memiliki satu byte dan yang lainnya
tiga atau lebih byte. Bita tambahan berisi data yang akan digunakan
oleh kode op dan disebut operan.

Dan inilah aksinya


1 Byte pertama masuk ke decoder instruksi di mana decode
menjadi urutan operasi internal.
2 Ini kemudian menyalin nomor 15H dari buffer data ke ALU, yang
Aritmatika dan unit logika.
3 Jumlah 25H dari akumulator kemudian disalin ke ALU
untuk bergabung dengan 15 jam yang sudah ada di sana. Dua angka itu
ditambahkan.
4 Dan hasilnya disalin kembali ke akumulator.
Apa hasilnya?
Ini 3AH. Hati-hati jangan biarkan otak Anda melompat kembali ke mode desimal
dan berteriak pada Anda.
Pada akhir program mesin-kode, kita harus menyertakan instruksi
untuk menghentikan program, jika tidak kita bisa mendapatkan sesuatu yang tidak terduga atau
hasil yang tidak diinginkan. Anda mungkin ingat itu, setidaknya dalam pengembangan
tahapan, program sering disimpan dalam RAM.
Sekarang, lokasi RAM mengambil nilai acak ketika mereka beralih
off sehingga ketika program telah menyelesaikan instruksi terakhir, itu akan mulai
mengeksekusi nilai acak seolah-olah mereka adalah sebuah program. Ini
instruksi dapat, tentu saja, melakukan apa saja. Mereka bahkan bisa menghapus
atau mengubah program yang baru saja kami tulis. Secara keseluruhan, efeknya adalah
seperti pesawat yang melampaui ujung landasan.

Masalah dengan kode mesin


Ada banyak sekali. Program ini tidak ramah: 11000110
00010101 hampir tidak membandingkan dengan ‘Tambahkan 15H ke nomor 25H’ untuk pemahaman
yang mudah. Tidak ada apa pun tentang 11000110 yang
mengingatkan kita tentang artinya ‘tambahkan nomor berikut ke nomor tersebut
disimpan dalam akumulator 'sehingga program perlu
susah payah diterjemahkan oleh byte byte.
Mengetik di aliran satu dan nol sangat membosankan yang akan kita buat
banyak kesalahan, terutama ketika kita ingat bahwa program nyata
mungkin sepuluh ribu kali lebih lama dari ini. Bisakah Anda membayangkan mengetik
dalam setengah juta bit, menemukan program tidak berjalan dengan benar dan
kemudian menetap untuk mencari kesalahan?
Masalah lain adalah bahwa programmer harus sadar akan
struktur internal mikroprosesor. Bagaimana lagi Anda bisa tahu
yang mendaftar untuk digunakan, atau bahkan yang terdaftar ada? Jadi, Anda menguasai
semua ini dan kemudian berubah menjadi mikroprosesor lain dan kemudian
apa? Seluruh proses belajar harus dimulai lagi - baru
instruksi, register baru, dan persyaratan pengkodean baru. Itu semua juga
mengerikan.
Kesulitan dengan kode mesin tidak penting di hari-hari awal
dari mikroprosesor. Semua orang yang memprogram mereka
fanatik dan menyukai kompleksitas dan ada beberapa pekerjaan serius
untuk mikroprosesor yang harus dilakukan. Bahasa program pertama ini dipanggil
bahasa 'tingkat rendah' untuk membedakannya dari kata-kata kita sendiri
bahasa komunikasi yang disebut bahasa tingkat tinggi.
Kode mesin kemudian disebut sebagai bahasa 'Generasi pertama'
(lihat Gambar 9.4).

Segera, mikroprosesor digunakan untuk berbagai peningkatan


tugas dan ide-ide revolusioner seperti 'kecepatan dan kemudahan' masuk ke dalam diskusi. Ini
menghasilkan bahasa baru yang disebut Assembly yang
mengatasi kegagalan paling cepat dari kode mesin.
Bahasa assembly, bahasa generasi kedua
Bahasa assembly dirancang untuk melakukan pekerjaan yang sama dengan mesin
kode tetapi jauh lebih mudah digunakan. Itu menggantikan semua yang dan nol dengan
huruf yang lebih mudah diingat tetapi masih tingkat rendah
bahasa.
Perakitan setara dengan contoh kode mesin kami 11000110
00010101 adalah kode ADD A, m. Ini berarti 'tambahkan nuMber, m ke
nilai yang disimpan dalam akumulator. Kita bisa segera melihat itu
akan jauh lebih mudah untuk menebak makna ADD A, m dari 11000110
00010101 dan itu membuat pemrograman menjadi lebih mudah. Jika kita harus
pilih huruf untuk mewakili perintah ‘add’, TAMBAH, m
jelas merupakan pilihan yang bagus. Peningkatan besar atas alternatif seperti
XYZ k, g atau ABC r, h. Kode TAMBAH, m disebut mnemonik.
Sebuah mnemonic (diucapkan sebagai nemonic) hanyalah bantuan untuk memori dan itu
digunakan untuk semua kode assembly. Berikut beberapa contoh:
SLA E untuk bergeser ke kiri, isi register E.
LD B 25H memuat register B dengan nomor 25H.
Sekarang lihat betapa mudahnya membuatnya dengan menebak arti dari ini:
INC H
LD C 48H
Akhirnya, lakukanlah pada salah satu yang belum kita pertimbangkan.
LD B B?
Jika SLA E berarti menggeser isi register E satu tempat ke kiri, lalu
SRA E berarti menggeser bit satu tempat ke kanan. LD C 48H berarti dimasukkan
nomor 48H ke dalam register C. LD B B? memungkinkan kami untuk menyalin
nomor yang disimpan di B? mendaftar ke daftar B.
Catatan: mnemonik aktual berbeda antara mikroprosesor. Itu
produsen mengeluarkan 'set instruksi' yang mencantumkan semua kode untuk masing-masing
mikroprosesor mereka. Bersama dengan jumlah siklus jam
diambil oleh setiap instruksi dan ringkasan fungsi masing-masing.

Pembacaan non-destruktif
Kebetulan, mikroprosesor sama dengan ingatan, selalu digunakan
bacaan non-destruktif. Ini berarti bahwa informasi bergeser dari
satu tempat ke tempat lain dengan menyalinnya dan meninggalkan nomor aslinya
tidak berubah. Misalnya, setelah instruksi LD A C, register A dan C keduanya akan diakhiri
dengan informasi yang sama di dalamnya. Ini
memungkinkan informasi yang tersimpan untuk digunakan berulang kali.
Untuk memungkinkan kami mengetikkan ADD A, 15 daripada 11000110 00010101, kami
perlu program lain untuk melakukan konversi. Program ini disebut sebagai
assembler (lihat Gambar 9.5).

Program ini memungkinkan kita untuk mengetik kode assembly, yang disebut
kode sumber, dan mengubahnya menjadi kode mesin yang disebut sebagai objek
kode. Ini dapat menunjukkan kode objek pada layar monitor atau mencetaknya
atau dapat memuatnya ke dalam RAM yang siap digunakan. Saat memulai
assembler, kita harus menyatakan alamat awal RAM yang kita inginkan
menggunakan. Ini biasanya hanya masalah memastikan dalam RAM
dan menghindari program lain yang sudah diinstal. Kode objek
ditunjukkan dalam angka heksa alih-alih biner untuk memudahkan kita.
Seorang assembler hanya dapat bekerja dalam set instruksi yang disediakan oleh
perancang mikroprosesor. Tidak dapat menambahkan instruksi baru dan
adalah (hampir) hanya konverter atau penerjemah sederhana antara mnemonik
dan kode mesin.
Perakitan tersedia dari banyak sumber dan semuanya menyediakan
konversi yang diperlukan dari kode sumber ke kode objek. Sebagai tambahan,
mereka dapat menyediakan fitur lain yang akan membantu kami dalam
pemrograman.

Bantuan sintaksis
Sintaksis adalah struktur pernyataan dalam bahasa, apakah itu
Bahasa Inggris atau bahasa komputer. Dalam bahasa Inggris, kebanyakan orang akan
mengenali sesuatu yang salah tentang mengatakan 'Dia akan' lebih baik
daripada ‘Dia pergi’. Ini adalah contoh kesalahan sintaks.
Sebagai contoh, Jika kita salah ketik instruksi LD A C sebagai LD A V kemudian
assembler tidak akan dapat mengubah ini menjadi kode objek karena itu
tidak akan mengenali 'V' sebagai daftar yang valid. Seorang perakit cheapie asli
mungkin hanya menghentikan atau melewatkan instruksi ini. Yang agak lebih baik mungkin
menaruh pesan di layar mengatakan 'kode kesalahan sintaksis tidak dikenali'
dan yang sangat membantu mungkin menyarankan kemungkinan penyebab masalah. Itu mungkin
katakan, ‘kesalahan sintaks. Register tidak valid. Nama daftar hanya boleh A, B, C,
D, E, H atau L. '

Label
Fasilitas lain yang ditawarkan oleh perakit yang baik adalah label. Label adalah a
kata yang dapat digunakan untuk merepresentasikan sebuah alamat saat program tersebut
sedang ditulis.
Anda akan ingat bahwa kita harus menginstruksikan mikroprosesor untuk berhenti
akhir dari sebuah program, jika tidak maka program akan berjalan dengan acak
instruksi. Salah satu cara menghentikan mikroprosesor adalah dengan memberikannya
sesuatu yang tidak ada artinya. Misalkan Anda membuka sebuah amplop,
dan pesan di dalam membaca 'letakkan amplop di atas meja, angkat,
buka amplop dan patuhi instruksi ’. Jadi Anda buka
amplop, baca instruksi, letakkan di meja, ambil dan baca
instruksi. Jadi Anda membuka amplopnya, baca petunjuknya. . .
dan saya yakin Anda bisa menebak sedikit berikutnya. Kami, tentu saja, akan segera
berhenti melakukan ini karena kita akan melihat bahwa itu tidak ada gunanya. SEBUAH
mikroprosesor di sisi lain tidak memiliki memori pernah melihatnya
instruksi sebelumnya dan akan sangat senang melakukannya selamanya jika
wajib.
Setiap byte program disimpan dalam urutan lokasi memori
jadi jika kita memulai program di alamat 0300H kita mungkin sudah sampai
alamat 0950H ketika instruksi berhenti diperlukan. Baris terakhir dari
program tersebut "melompat ke alamat 0950H’. Instruksi lompat memberitahu
mikroprosesor untuk menuju ke alamat yang mengikuti, dalam kasus ini
0950H, dan lakukan instruksi untuk ditemukan di sana. Mikroprosesor
sekarang menemukan dirinya dalam lingkaran tanpa akhir ditunjukkan pada Gambar 9.6.
Setelah mikroprosesor di salah satu loop ini akan berjalan
terus menerus hingga catu daya dimatikan, atau pin reset
diambil rendah, atau salah satu pin interupsi diaktifkan.
Jadi di mana labelnya masuk?
Mari kita bayangkan bahwa kita menemukan bahwa kita harus menambahkan byte ekstra di awal
dari program. Ini akan menghasilkan setiap byte digeser satu tempat
di dalam memori dan baris terakhir dari program sebenarnya dimulai
di alamat 0951H daripada 0950H. Ketika program memberi tahu
mikroprosesor untuk melompat ke alamat 0950H tidak akan lagi berada di loop kecil. Isi baru dari alamat
0950H dapat menyediakan apa saja
instruksi acak dan seluruh program bisa crash.

Masalah ini,
ditunjukkan pada Gambar 9.7, tidak akan dilihat sebagai kesalahan oleh assembler.
Ingat bahwa assembler hanya memeriksa kode yang dikenal, bukan
program yang masuk akal.
Jika kita mengetikkan kata di atas posisi tempat alamat memori
biasanya berada akan diakui oleh assembler sebagai label. Bahwa
adalah kata yang setara dengan alamat yang diganti. Jika kami menggunakan
label yang sama di tempat lain dalam program itu akan diberikan hal yang sama
nilai. Hal yang baik tentang ini adalah bahwa jika program tersebut berubah dan
alamat berubah, maka nilai label diubah
secara otomatis sehingga dua ‘STOP’ di baris terakhir akan selalu memiliki
nilai yang sama dan loop akan aman dari kehancuran yang tidak disengaja
(Gambar 9.8).
Setelah assembler menerima label, itu bisa digunakan sesering kami
seperti dalam program tetapi ingat bahwa label hanya dapat memilikinya
artinya dalam satu program. Pilihan label biasanya
dibatasi untuk menghindari bentrok dengan kata-kata yang memiliki arti khusus
assembler. Kata-kata yang dapat melakukan ini disebut kata-kata 'dilindungi undang-undang' dan
biasanya termasuk kata-kata seperti lompatan, LD, ADD, HALT dll. Yang sebenarnya
daftar disediakan dengan program assembler.

Keterangan
Perakit dan semua bahasa yang lebih tinggi memungkinkan kita menulis komentar atau catatan
untuk bertindak sebagai pengingat tetapi harus diabaikan oleh assembler. Untuk memberi tahu
program assembler untuk tidak mencoba mengubahnya menjadi object code kita
mendahului catatan dengan titik koma atau kata REM: atau sesuatu
serupa.
Baris terakhir dari program kami, menggunakan mnemonic JP for jump bisa
ditulis sebagai:
STOP JP STOP, ini akan menahan mikroprosesor dalam satu lingkaran.
Mampu menambahkan komentar ke program membuatnya lebih mudah untuk
program yang harus dipahami di kemudian hari. Pada saat coding,
program tampaknya, untuk programmer setidaknya, model kejelasan. Kapan
programmer tidak aktif dan kita harus mengambil alih, strategi mereka
tidak jelas sama sekali. Bahkan lebih memalukan jika program itu kita
tidak bisa mengerti adalah salah satu yang kami tulis sendiri beberapa minggu
sebelumnya. Moral dari cerita ini adalah menambahkan catatan bahkan jika tampaknya
sangat jelas pada saat itu.

Ringkasan bahasa assembly


Perakitan dan kode mesin tidak portabel. Ini artinya mereka
dirancang untuk digunakan pada mikroprosesor tertentu dan umumnya
tidak dapat digunakan pada tipe lain. Mereka juga membutuhkan programmer
untuk memiliki pengetahuan tentang tata letak internal atau arsitektur
mikroprosesor.
Meskipun dua masalah portabilitas dan pengetahuan arsitektur,
Bahasa assembly telah bertahan dari serangan gencar yang baru, modern
Bahasa 'ditingkatkan' dipertimbangkan dalam bab berikutnya.
Mengapa?
Bahasa assembly memiliki dua kelebihan utama di tangan a
programmer yang kompeten (catat ‘kompeten’). Program yang ditulis dalam
Perakitan lebih cepat dan lebih ringkas, yaitu membutuhkan lebih sedikit ruang memori
untuk menyimpannya. Kode mesin dan bahasa assembly disebut
bahasa prosedural. Ini berarti bahwa program menginstruksikan
mikroprosesor untuk menyelesaikan instruksi pertama, kemudian mulai berikutnya,
kemudian berikutnya dan seterusnya sampai selesai pekerjaan. Ini seperti sebuah
resep.
Hampir semua sistem berbasis mikroprosesor dirancang untuk beroperasi di
dengan cara ini dan tampaknya sangat jelas bahwa sulit untuk berpikir bahwa ada
setiap alternatif - tetapi ada, seperti yang akan kita lihat nanti.

Dalam setiap kasus, pilih opsi terbaik.


1 Seorang assembler:
(A) mengkonversi program perakitan ke dalam kode mesin.
(B) adalah jenis mikroprosesor.
(c) mengubah kode objek menjadi kode mesin.
(D) sangat penting untuk mengubah mnemonik menjadi kode sumber.
2 Data yang mengikuti kode op:
(a) selalu ada dan terdiri dari satu atau lebih byte.
(b) disebut kode objek.
(c) disebut operan.
(D) menggunakan nomor denary.
3 label A adalah:
(A) fitur penting dalam pakaian desainer.
(B) bentuk kesalahan sintaks.
(C) digunakan untuk mewakili alamat saat program sedang
tertulis.
(D) bagian dari program yang datang sebelum operan.
4 Kode mesin adalah:
(a) bukan bahasa tingkat rendah.
(B) ditulis menggunakan mnemonik.
(c) bahasa apa pun yang dirancang untuk mengendalikan mesin di industri.
(D) kode objek.
5 Bagian dari mikroprosesor yang dapat mengikuti
kode mesin disebut:
(a) Assembler.
(B) Dekoder instruksi.
(c) Daftar instruksi.
(d) Mekanik.
131