Jam Ne

Selasa, 21 Juni 2011

BAHASA ASSEMBLY NOTASI BILANGAN dan OPERASI INPUT/OUTPUT DASAR


NOTASI BILANGAN
Pada saat berhadapan dengan nilai numerik, seringkali lebih mudah untuk menggunakan notasi desimal yang telah dikenal. Tentu saja, nilai tersebut disimpan dalam komputer sebagai bilangan biner. Pada beberapa situasi, lebih mudah untuk menetapkan pola biner secara langsung. Kebanyakan assembler memungkinkan bilangan numerik dinyatakan dengan berbagai cara yang berbeda, menggunakan konvensi yang ditetapkan oleh syntax bahasa assembly. Misalkan, bilangan 93, yang dinyatakan dengan bilangan biner 8bit 01011101. Jika nilai ini digunakan sebagai operand Immediate, maka dapat dinyatakan sebagai bilangan desimal, sebagaimana dalam instruksi :
ADD #93, RI
atau sebagai bilangan bitter yang diidentifikasi dengan simbol awalan seperti tanda persen, sebagaimana dalam
ADD #%01011101, R1
Bilangan biner dapat dituliskan lebih padat sebagai bilangan heksadesimal, atau hex, dengan empat bit dinyatakan dengan digit hex tunggal. Notasi hex adalah ekstensi langsung dari kode BCD yang terdapat dalam Apendiks E. Sepuluh pola pertama 0000, 0001, ..., 1001, dinyatakan dengan digit 0, 1, ..., 9 sebagaimana dalam BCD. Sisa enam pola 4bit, 1010, 1011, ..., I111, dinyatakan dengan huruf A, B, ..., F. Dalam representasi heksadesimal, nilai desimal 93 menjadi SD. Dalam bahasa assembly, representasi hex seringkali diidentifikasi dengan awalan tanda dolar. Sehingga kita menuliskannya
ADD #$SD, R1

OPERASI INPUT/OUTPUT DASAR
Bagian sebelumnya dalam bab ini mendeskripsikan instruksi mesin dan mode pengalamatan. Kita telah mengasumsikan bahwa data yang dikenai operasi instruksi ini telah disimpan dalam memori. Kita sekarang membahas sarana yang digunakan untuk mentransfer data antara memori komputer dan dunia luar. Operasi Input/Output (I/O) sangat penting, dan cara operasi tersebut dijalankan dapat memiliki efek yang signifikan pada performa komputer.
Misalkan suatu tugas untuk membaca input karakter dari keyboard dan menghasilkan output karakter pada layar display. Cara sederhana untuk menjalankan tugas I/O tersebut adalah dengan menggunakan metode yang dikenal sebagai programcontrolled I/O. Kecepatan transfer data dari keyboard ke komputer dibatasi oleh kecepatan mengetik user, yang tampaknya tidak melebihi beberapa karakter per detik. Kecepatan transfer output dari komputer untuk ditampilkan jauh lebih tinggi. Hal ini ditentukan oleh kecepatan karakter ditransmisikan melalui link antara komputer dan perangkat display, biasanya, beberapa ribu karakter per dedtik. Akan tetapi ini masih jauh lebih lambat daripada kecepatan prosesor yang dapat mengeksekusi jutaan instruksi per detik. Perbedaan kecepatan antara prosesor dan perangkat I/O menimbulkan kebutuhan akan adanya mekanisme untuk mensinkronisasikan transfer data diantara keduanya.
Gambar Koneksi bus untuk prosesar, keyboard, dan display.
Solusi untuk persoalan tersebut adalah sebagai berikut: pada output, prosesor mengirim karakter pertama dan kemudian menunggu sinyal dari display bahwa karakter telah diterima. Kemudian mengirim karakter kedua, dan seterusnya. Input dikirim dari keyboard dengan cara yang sama; prosesor menunggu sinyal yang mengindikasikan bahwa suatu tombol karakter telah ditekan dan kodenya tersedia dalam beberapa register buffer yang diasosiasikan dengan keyboard. Kemudian prosesor membaca kode tersebut.
Keyboard dan display adalah perangkat yang terpisah. Tindakan menekan suatu tombol pada keyboard tidak secara otomatis menyebabkan karakter yang sesuai ditampilkan pada layar. Satu blok instruksi dalam program I/O mentransfer karakter tersebut ke prosesor, dan blok lain yang berhubungan dengan instruksi tersebut menyebabkan ditampilkannya karakter tersebut.
Misalkan suatu persoalan pemindahan kode karakter dari keyboard ke prosesor. Menekan suatu tombol akan menyimpan kode karakter yang sesuai dalam register buffer 8bit
yang sesuai dengan keyboard. Mari kita sebut register ini DATAIN. Untuk memberitahu prosesor bahwa karakter yang valid berada dalam DATAIN, suatu status control flag, SIN, diset ke 1. Suatu program memonitor SIN, dan saat SIN diset ke 1, prosesor membaca isi DATAIN. Pada saat karakter ditransfer ke prosesor, maka SIN secar otomatis dikosongkan ke 0. Jika karakter kedua dimasukkan melalui keyboard, maka SIN diset lagi ke 1 dan proses tersebut diulang.
Proses yang analog terjadi pada saat karakter ditransfer dari prosesor ke display. Register buffer, DATAOUT, dan status control flag, SOUT, digunakan untuk transfer ini. Pada saat SOUT setara dengan I, maka display siap untuk menerima suatu karakter. Di bawah kontrol program, prosesor memonitor SOUT, dan pada saat SOUT diset ke 1, prosesor mentransfer kode karaktei ke DATAOUT. Transfer karakter ke DATAOUT mengosongkan SOUT ke 0; pada saat perangkat display siap untuk menerima karakter kedua, maka SOUT sekali lagi di set ke 1. Register buffer DATAIN dan DATAOUT dan flag status SIN dan SOUT adalah bagian dari sirkuit yang biasanya dikenal sebagai device interface. Sirkuit untuk tiap perangkat dihubungkan ke prosessor melalui bus.
Untuk menjalankan transfer I/O, kita memerlukan instruksi mesin yang dapat memeriksa keadaan flag status dan transfer data antara prosesor dan perangkat I/O. Instruksi tersebut memiliki kemiripan format dengan yang digunakan untuk memindahkan data antara prosesor dan memori. Misalnya, prosesor dapat memonitor flag status keyboard SIN dan transfer karakter dari DATAIN ke register Rl dengan rangkaian operasi sebagai berikut:
READWAIT      Branch to READMIT if SIN = 0
Input from DATAIN to R1
Operasi Branch biasanya diimplementasikan oleh dua instruksi mesin. Instruksi pertama menguji flag status dan yang kedua menjalankan branch. Sekalipun detilnya bervariasi dan satu komputer ke komputer lain, ide utamanya adalah prosesor memonitor flag status dengan mengeksekusi wait loop pendek dan melanjutkan untuk mentransfer data input pada saat SIN diset ke 1 sebagai hasil dari adanya suatu tombol yang ditekan. Operasi Input mereset SIN ke 0.
Rangkaian yang analog dari operasi tersebut digunakan untuk mentransfer output ke dis play. Contohnya adalah WRITEWAIT Branch to WRITEWAIT if SOUT = 0 Output from R1 to DATAOUT Lagi, operasi Branch biasanya diimplementasikan oleh dua instruksi mesin. Wait loop dieksekusi berulangkali hingga flag status SOUT diset ke 1 oleh display pada saat display bebas untuk menerima suatu karakter. Operasi Output mentransfer suatu karakter dari RI ke DATAOUi untuk ditampilkan, dan operasi tersebut mengosongkan SOUT ke 0.
Kita mengasumsikan bahwa keadaan awal SIN adalah 0 dan keadaan awal SOUT adalah 1. Awalan ini biasanya dilakukan oleh sirkuit kontrol perangkat pada saat perangkat ditempatkan di bawah kontrol komputer sebelum eksekusi program dimulai.
Hingga sekarang, kita telah mengasumsikan bahwa alamat yang dinyatakan oleh prosesor untuk untuk mengakses iustruksi dan operand selalu mengacu ke lokasi memori. Banyak komputer menggunakan pengaturan yang disebut memorymapped I/O dimana beberapa nilai alamat memori digunakan untuk mengacu ke register buffer perangkat periferal, seperti DATAIN dan DATAOUT. Sehingga, tidak ada instruksi khusus untuk mengakses isi register tersebut; data dapat ditransfer antara register dan prosesor menggunakan instruksi yang telah kita bahas, seperti Move, Load, atau Store. Misalnya, isi buffer karakter keyboard DATAIN dapat ditransfer ke register R1 dalam prosesor dengan instruksi MoveByte DATAIN, RI Serupa dengan isi register RI dapat ditransfer ke DATAOUT dengan instruksi MoveByte R1, DATAOUT Flag status SIN dan SOUT secara otomatis dikosongkan pada saat masingmasing mengacu pada register buffer DATAIN dan DATAOUT. Kode operasi MoveByte menunjukkan bahwa ukuran operand adalah satu byte, untuk membedakannya dari kode operasi Move yang telah digunakan untuk operand word. Kita telah menetapkan bahwa dua buffer data, dapat diberi alamat seakan keduanya adalah dua lokasi memori. Sangat dimungkinkan untuk menangani flag status SIN dan SOUT dengan cara yang sama, dengan menetapkan alamat yang berbeda padanya. Akan tetapi, lebih umum untuk menyertakan SIN dan SOUT pada register device status, satu untuk tiap dua perangkat. Mari kita asumsikan bahwa bit b3 dalam register INSTATUS dan OUTSTATUS masingmasing berhubungan dengan SIN dan SOUT. Operasi baca yang barn saja dideskripsikan dapat diimplementasikan dengan rangkaian instruksi mesin
READWAIT Testbit        #3,INSTATUS
Branch=0                READWAIT
MoveByte DATAIN, R1
Operasi tulis dapat diimplementasikan sebagai berikut:
WRITEWAIT Testbit       #3, OUTSTATUS
Branch=0                WRITEWAIT
MoveByte RI, DATAOUT
Instruksi Testbit menguji keadaan satu bit pada lokasi destinasi, dimana posisi bit yang diuji diindikasikan oleh operand pertama. Jika bit yang diuji setara dengan 0, maka kondisi instruksi branch adalah benar, dan suatu branch dibuat pada awal wait loop. Pada saat perangkat tersebut siap, yaitu pada saat bit yang diuji menjadi setara dengan 1, data dibaca dari buffer input atau ditulis ke buffer output.
Program yang ditampilkan pada gambar di bawah menggunakan dua operasi untuk membaca baris karakter yang diketikkan pada keyboard dan dikirim ke parangkat display. Pada saat karakter tersebut dibaca, satu demi satu, karakter tersebut disimpan pada area data dalam memori dan kemudian ditampilkan pada display. Program berakhir pada saat karakter carriage return, CR, dibaca, disimpan, dan dikirim ke display. Alamat lokasi byte pertama dari memori data area tempat baris tersebut disimpan adalah LOC dengan instruksi pertama dari program tersebut. RO dinaikkan untuk tiap karakter yang dibaca dan ditampilkan oleh mode pengalamatan Autoincrement yang digunakan dalam instruksi Compare
.
 
Gambar program yang membaca sebaris karakter dan menampilkannya
Program controlled IO memerlukan keterlibatan kontinyu prosesor dalam aktifitas l/0. Hampir semua waktu eksekusi untuk program dalam gambar dihitung dalam dua wait loop, pada saat prosesor menunggu karakter yang akan ditekan atau menunggu display tersedia. Sangat diinginkan untuk menghindari terbuangnya waktu eksekusi prosesor pada situasi ini. Teknik I/O yang lain, berdasar pada penggunaan interrupt, dapat digunakan untuk meningkatkan utilisasi prosesor.

Tidak ada komentar:

Posting Komentar