5. lnstruksi Aritmetika dan Logika

Download Report

Transcript 5. lnstruksi Aritmetika dan Logika

A.Muh.Saad





membahas sejumlah instruksi logika dan
instruksi aritmetika.
Instruksi aritmetika adalah instruksi
penjumlahan, pengurangan, perkalian,
pembagian, perbandingan, negasi, inkremen
dan dekremen.
Instruksi logika adalah AND, OR, XOR, NOT,
shift
(penggeseran), rotate (pemutaran) dan TEST
(perbandingan logika).
Instruksi aritmetika dan logika pada
mikroprosesor 80386 sampai Pentium II antara
lain XADD, SHRD, SHLD, test bit dan scan bit.
Setelah Anda menyelesaikan bab ini Anda
diharapkan mampu:
1. Menggunakan instruksi aritmetika dan logika untuk
menyelesaikan perhitungan sederhana dalam sistem
bilangan biner, BCD, dan ASCII.
2. Menggunakan instruksi AND, OR, dan XOR untuk
menuntaskan manipulasi bit.
3. Menggunakan instruksi shift (penggeseran) bit dan
rotate (pemutaran) bit.
4. Menerangkan operasi 80386 sampai Pentium II
mengenai instruksi pertukaran dan penjumlahan,
perbandingan dan pemindahan, pergeseran presisi
ganda (double precision shift), bit test, dan bit
scan.
5. Memeriksa isi tabel untuk pencocokan
menggunakan instruksi string.



Penggunaan instruksi ADD untuk
penjumlahan dalam format biner 8 bit, 16
bit, dan 32 bit.
Format lain dari instruksi penjumlahan
yaitu penjumlahan dengan carry, dibahas
dalam instruksi ADC.
Instruksi inkremen (INC). Inkremen adalah
format khusus dari penjumlahan yaitu
menambahkan suatu bilangan dengan satu

Flag paling kanan ini mencatat hasil
aritmetika atau operasi logika sejumlah
instruksi akan mengubah isi dari sign,
zero, carry, auxiliary carry, parity dan
overflow flag.

Flag paling kanan ini mencatat hasil
aritmetika atau operasi logika sejumlah
instruksi akan mengubah isi dari sign,
zero, carry, auxiliary carry, parity dan
overflow flag.

Penjumlahan segera dilakukan ketika
konstanta atau data yang diketahui
ditambahkan.

Anggap sebuah program aplikasi
memerlukan penambahan data memori ke
register AL.

Array memori adalah sederetan data
terurut. Anggaplah se-array data (ARRAY)
berisi 10 byte dengan indeks elemen
dimulai dari 0 sampai 9.


Penjumlahan increment (INC) adalah penjumlahan
1 ke register atau ke satu lokasi memori, secara
bertahap.
Instruksi INC dapat menambahkan 1 ke register
atau lokasi apa saja kecuali segmen register.


Addition-with-carry (ADC) berfungsi
menjumlahkan register flag (C) ke data
operand.
Umumnya instruksi ini tampil dalam
perangkat lunak untuk penjumlahan
bilangan yang lebarnya lebih dari 16 bit
dalam mikroprosesor 8086-80286 atau
yang lebih dari 32-bit dalam 80386
sampai dengan Pentium II.






Satu tipe baru penjumlahan yang disebut exchange
and add (XADD) hadir dalam kumpulan instruksi
prosesor 80486 sampai Pentium II.
lnstruksi XADD menjumlahkan data dari sumber data
ke tujuan data dan menyimpan hasil penjumlahan
pada tempat tujuan,
untuk berbagai macam bentuk penjumlahan.
Perbedaannya adalah bahwa setelah penjumlahan
dilakukan, nilai dari tempat tujuan disalin ke
operand sumber.
Contoh,
jika BL = 12H dan DL = O2H
saat instruksi XADD BL, DL

Ada banyak bentuk pengurangan (SUB)



instruksi untuk melakukan pengurangan
register
Setetafr setiap instruksi pengurangan,
mikroprosesor mengubah isi register flag.
Register flag berubah untuk sebagian
besar instruksi logika dan aritmatika.

Seperti halnya penjumlahan, mikroprosesor
memungkinkan operand segera untuk
pengurangan data konstan.



Pengurangan dengan satu (DEC)
mengurangkan1 setahap demi setahap dari
register atau isi lokasi memori.
Tabel 5-5 memuat instruksi decrement yang
menggambarkan dekremen register dan memori'


Instruksi pengurangan dengan pinjam (SBB,
yaitu subract-with-borrow) sama seperti
halnya pengurangan biasa, kecuali bahwa
flag carry (c), yang menampung pinjaman,
juga adalah hasil selisih pengurangan.
Penggunaan terpopuler dari instruksi ini
adalah untuk pengurangan bilangan dalam
bentuk yang lebih lebar dari 16-bit pada
mikroprosesor 8086-80286 atau lebih
lebar dari 32-bit dalam 80386 sampai
Pentium II.



Instruksi perbandingan (CMP) adalah bentuk
pengurangan yang hanya mengubah bit-bit flag,
sedangkan operand tujuan tidak pernah berubah.
Perbandingan sangat berguna untuk memeriksa seluruh
isi register atau lokasi memori terhadap suatu nilai
tertentu.
CMP biasanya diikuti dengan instruksi jump bersyarat,
yang mengetes tiap bit flag.
◦ JA (Jump Above) atau
◦ JB (Jump Below).
◦ Jika JA mengikuti instruksi perbandingan, jump terjadi Jika
nilai AL berada di atas 10H.
◦ Jika JB mengikuti instruksi perbandingan, jump terjadi Jika
nilai AL berada di bawah 10H
◦ Instruksi loncatan lainnya JAE (Jump Above or Equal) atau
◦ Instruksi loncatan lainnya JBE (Jump Below or Equal)




Instruksi perbandingan dan pertukaran data
(CMPXCHG) yang dapat ditemukan hanya
pada kumpulan instruksi prosesor 80486
sampai Pentium II, membandingkan
operand tujuan dengan akumulator.
Jika sama, operand sumber akan disalinkan
ke tujuan.
Jika tidak sama maka operand tujuan akan
disalinkan ke akumulator.
Instruksi ini berlaku untuk format data 8-,
16-, dan 32-bit


Perkalian dilakukan dalam format byte,
word, dan doubleword, dan dapat juga
bilangan bulat bertanda (IMUL) atau
bilangan bulat takbertanda (MUL).
Beberapa bit flag (O dan C) berubah saat
proses perkalian dijalankan dan
memberikan hasil yang dapat diramalkan
sebelumnya.

Dengan perkalian 8-bit, apakah bilangan
bertanda atau tidak bertanda, angka yang
dikalikan selalu berada pada register AL.
Pengali dapat berupa register 8-bit atau
lokasi memori manapun.


Perkalian dalam format word hampir sama
dengan perkalian dalam format byte.
Bedanya adalah, AX berisi bilangan yang
dikalikan dan bukan AL, sedangkan
hasilkalinya muncul di DX-AX dan bukan di
AX.
Register DX selalu berisi hasil perkalian
MSB 16-bit, dan AX LSB 16-bitnya.




Dalam kelas mikroprosesor 80386 ke atas,
perkalian 32-bit diperbolehkan karena
mikroprosesornya memiliki 32-register. Seperti
halnya perkalian 8- dan 16-bit,
perkalian 32-bit dapat berupa bilangan
bertanda maupun takbertanda dengan
menggunakan instruksi IMUL dan MUL.
Dengan perkalian 32-bit, isi register EAX
dikalikan dengan operand yang ditetapkan
dengan satu instruksi.
Hasil perkalian (format 64-bit) dapat
ditemukan dalam EDX-EAX di mana EAX berisi
LSB 32-bit hasil perkalian.








Seperti halnya perkalian, pembagian terjadi pada
bilangan 8- atau 16-bit dan juga bilangan 32bit dalam
mikroprosesor 80386 sampai Pentium Pro.
Bilangan-bilangan ini adalah bilangan bulat bertanda
(IDIV) atau takbertanda (DIV).
Hasil pembagian selalundua kali lebarnya dari bilangan
yang dibagi.
Artinya, pembagian 8-bit membagi bilangan
16-bit dengan bilangan 8-bit;
pembagian 16-bit membagi bilangan 32-bit dengan
bilangan 16-bit dan
pembagian 32-bit membagi bilangan 64-bit dengan
bilangan 32-bit.
Untuk mikroprosesor apapun, tidak tersedia instruksi
pembagian segera.


Pembagian 8-bit menggunakan registerAX
untuk menyimpan bilangan yang akan
dibagi untuk dibagi dengan isi register 8bit mana pun atau isi lokasi memori.
Hasil bagi diletakkan di AL setelah
pembagian dengan AH berisi seluruh nilai
sisa pembagian.


Pembagian 16-bit serupa dengan
pembagian 8-bit, perbedaannya hanyalah
bahwa pembagian tidak dilakukan bilangan
l6-bit pada AX, tetapi justru pada register
DX-AX, yakni pembagi 32-bit.
Hasil pembagian (kuosien) ditampilkan di
AX dan sisa pembagian ditampilkan di DX
setelah instruksi pembagian 16-bit
dijalankan.




Mikroprosesor 80386 sampai Pentium II
melakukan pembagian 32-bit dalam bilangan
bertanda atau bilangan takbertanda.
Isi EDX-EAX format 64-bit dibagi dengan
operand yang telah ditentukan dengan
instruksi,
lalu hasil pembagian32-bit diletakkan di EAX
dan sisa pembagian 32-bit di EDX.
Selain ukuran dari registernya yang
berbeda,instruksi ini mempunyai fungsi yang
sama dengan instruksi pembagian 8-bit dan
16-bit. T




Apa yang dilakukan pada sisa pembagian yang
merupakan akibat dari proses pembagian? Ada
beberapa kemungkinan.
Sisa pembagian dapat digunakan untuk pembulatan
ke atas (round) dari hasil pembagian atau dibuang
untuk membulatkan ke bawah (truncate) hasil
pembagian.
Jika pembagian bilangan takbertanda, pembulatan
dilakukan setelah membandingkan sisa pembagian
dengan setengah pembagi untuk menentukan
apakah pembulatan ke atas hasil pembagian dapat
dilakukan.
Hasil pembagian juga dapat dikonversikan ke
dalam bentuk pecahan.