Jenis Operasi x86
x86 menyediakan array kompleks jenis operasi, termasuk sejumlah khusus
instruksi. Tujuannya adalah untuk menyediakan alat-alat untuk penulis compiler untuk menghasilkan
dioptimalkan mesin terjemahan bahasa program bahasa tingkat tinggi. tabel 12.8
daftar jenis dan memberikan contoh masing-masing. Sebagian besar adalah konvensional
petunjuk yang ditemukan di sebagian besar mesin set instruksi, tetapi beberapa jenis instruksi
disesuaikan dengan arsitektur x86 dan kepentingan tertentu. Lampiran A dari
[CART06] berisi petunjuk x86, bersama-sama dengan operan untuk masing-masing dan
efek dari instruksi pada kode kondisi. Lampiran B dari perakitan NASM
pengguna bahasa memberikan penjelasan lebih rinci dari setiap instruksi x86. Kedua
dokumen tersebut tersedia di situs Web buku ini.
CALL / RETURN INSTRUKSI x86 menyediakan empat instruksi untuk mendukung
Prosedur call / pulang: CALL, ENTER, TINGGALKAN, RETURN. Ini akan menjadi pelajaran untuk melihat dukungan yang diberikan oleh petunjuk ini. Ingat dari Gambar 12.10 bahwa
sarana umum menerapkan mekanisme prosedur panggilan / return adalah melalui penggunaan
dari tumpukan frame. Ketika prosedur baru disebut, berikut ini harus dilakukan
pada saat masuk ke prosedur baru:
• Dorong titik pengembalian stack.
• Dorong frame pointer saat ini di stack.
• Salin stack pointer sebagai nilai baru dari pointer bingkai.
• Sesuaikan stack pointer untuk mengalokasikan frame.
Instruksi PANGGILAN mendorong arus nilai instruksi pointer ke stack
dan menyebabkan melompat ke titik masuknya prosedur dengan menempatkan alamat
entry point dalam instruksi pointer. Di 8088 dan 8086 mesin, khas
Prosedur dimulai dengan urutan
PUSH EBP
MOV EBP, ESP
SUB ESP, space_for_locals
mana EBP adalah frame pointer dan ESP adalah pointer stack. Di 80286 dan kemudian
mesin, ENTER instruksi melakukan semua operasi tersebut dalam
instruksi tunggal. Instruksi ENTER ditambahkan ke set instruksi untuk memberikan dukungan langsung untuk compiler. instruksi juga termasuk fitur untuk mendukung apa yang
disebut prosedur bersarang dalam bahasa seperti Pascal, COBOL, dan Ada (tidak ditemukan
di C atau FORTRAN). Ternyata ada cara yang lebih baik dari penanganan bersarang
Prosedur panggilan untuk bahasa tersebut. Selanjutnya, meskipun ENTER instruksi
menghemat beberapa byte memori dibandingkan dengan PUSH, MOV, urutan SUB
(4 bytes dibandingkan 6 byte), itu benar-benar membutuhkan waktu lebih lama untuk mengeksekusi (10 siklus clock vs 6 siklus jam). Dengan demikian, meskipun mungkin tampak ide yang baik untuk instruksi mengatur desainer untuk menambahkan fitur ini, itu mempersulit pelaksanaan prosesor
sambil memberikan sedikit atau tidak ada manfaat. Kita akan melihat bahwa, sebaliknya, pendekatan RISC untuk prosesor desain akan menghindari instruksi kompleks seperti ENTER dan kekuatan
menghasilkan implementasi yang lebih efisien dengan urutan instruksi sederhana.
MANAJEMEN MEMORY Satu set instruksi khusus berkaitan dengan memori
segmentasi. Ini adalah petunjuk istimewa yang hanya bisa dijalankan dari
sistem operasi. Mereka memungkinkan tabel segmen lokal dan global (tabel disebut descriptor)
yang akan diambil dan membaca, dan untuk tingkat hak istimewa dari segmen untuk diperiksa dan diubah.
Instruksi khusus untuk menangani cache on-chip yang dibahas di Bab 4.
BENDERA STATUS DAN KODE KONDISI bendera Status yang bit dalam register khusus
yang dapat ditetapkan oleh operasi tertentu dan digunakan dalam instruksi cabang bersyarat. Itu
kode kondisi merujuk pada pengaturan dari satu atau lebih bendera status. Dalam x86 dan
banyak arsitektur lainnya, flag status yang ditetapkan oleh aritmatika dan membandingkan operasi.
Operasi membandingkan dalam kebanyakan bahasa mengurangi dua operan, seperti halnya kurangi sebuah operasi. Perbedaannya adalah bahwa operasi membandingkan hanya menetapkan bendera status, sedangkan operasi kurangi juga menyimpan hasil dari pengurangan dalam operan tujuan.
Beberapa arsitektur juga menetapkan bendera status instruksi transfer data.
Tabel 12.9 mencantumkan status flag digunakan pada x86. Setiap bendera, atau kombinasi dari
bendera ini, dapat diuji untuk melompat bersyarat. Tabel 12.10 menunjukkan kondisi
Kode (kombinasi dari nilai status flag) yang opcodes melompat bersyarat memiliki
didefinisikan.
Beberapa pengamatan menarik dapat dibuat tentang daftar ini. Pertama, kita mungkin
ingin menguji dua operan untuk menentukan apakah satu nomor lebih besar dari yang lain. Tapi
ini akan tergantung pada apakah nomor tersebut ditandatangani atau unsigned. Sebagai contoh,
8-bit nomor 11111111 lebih besar dari 00.000.000 jika dua angka ditafsirkan
bulat sebagai unsigned (255 7 0) tapi kurang jika mereka dianggap sebagai 8-bit berpasangan melengkapi nomor (-1 6 0). Oleh karena itu banyak bahasa assembly memperkenalkan dua set
istilah untuk membedakan dua kasus: Jika kita membandingkan dua angka sebagai ditandatangani
bilangan bulat, kita menggunakan istilah kurang dari dan lebih besar dari; jika kita membandingkan mereka sebagai unsigned integer, kita menggunakan istilah di bawah dan di atas.
Pengamatan kedua menyangkut kompleksitas membandingkan bilangan bulat ditandatangani.
Hasil ditandatangani lebih besar dari atau sama dengan nol jika (1) bit tanda adalah nol dan ada
tidak ada overflow (S = 0 DAN O = 0), atau (2) bit tanda adalah salah satu dan ada overflow.
Sebuah studi dari Gambar 10.4 harus meyakinkan Anda bahwa kondisi diuji untuk berbagai
operasi ditandatangani sesuai.
X86 SIMD INSTRUKSI Pada tahun 1996, Intel memperkenalkan teknologi MMX ke nya
lini produk Pentium. MMX adalah set instruksi yang sangat optimal untuk tugas-tugas multimedia.
Ada 57 instruksi baru yang memperlakukan data di SIMD satu (single-instruksi, multipledata)
fashion, yang memungkinkan untuk melakukan operasi yang sama, seperti penambahan
atau perkalian, pada beberapa elemen data sekaligus. Setiap instruksi biasanya membutuhkan
siklus clock untuk mengeksekusi. Untuk aplikasi yang tepat, ini operasi paralel cepat
dapat menghasilkan speedup dua sampai delapan kali lebih algoritma sebanding yang tidak menggunakan petunjuk MMX [ATKI96]. Dengan diperkenalkannya arsitektur x86 64-bit,
Intel telah memperluas ekstensi ini untuk menyertakan quadword ganda (128 bit) operan dan
operasi floating-point. Dalam ayat ini, kita menggambarkan fitur MMX.
Fokus MMX adalah pemrograman multimedia. Video dan audio data yang biasanya
terdiri dari array besar jenis data kecil, seperti 8 atau 16 bit, sedangkan konvensional
instruksi yang disesuaikan untuk beroperasi pada data 32 atau 64-bit. Berikut adalah beberapa
contoh: Dalam grafis dan video, adegan tunggal terdiri dari array piksel 2 dan ada 8 bit untuk setiap pixel atau 8 bit untuk setiap komponen warna pixel (merah, hijau,
biru). audio sampel khas dikuantisasi menggunakan 16 bit. Untuk beberapa grafis 3D
algoritma, 32 bit yang umum untuk tipe data dasar. Untuk menyediakan operasi paralel
pada ini panjang data, tiga jenis data baru didefinisikan dalam MMX. setiap data
Jenis adalah 64 bit panjang dan terdiri dari beberapa bidang data yang lebih kecil, masing-masing
memegang fixed-point integer. Jenis adalah sebagai berikut:
• byte Dikemas: Delapan byte dikemas ke dalam satu kuantitas 64-bit
• Kata Dikemas: Empat kata 16-bit dikemas menjadi 64 bit
• Dikemas doubleword: Dua 32-bit doublewords dikemas menjadi 64 bit
Tabel 12.11 daftar MMX set instruksi. Sebagian besar instruksi melibatkan
operasi paralel pada byte, kata, atau doublewords. Misalnya, PSLLW yang instruksi melakukan pergeseran logis kiri secara terpisah pada masing-masing dari empat kata dalam dikemas kata operan; instruksi PADDB membutuhkan waktu dikemas operan byte sebagai masukan dan melakukan penambahan paralel pada setiap posisi byte secara independen untuk menghasilkan dikemas keluaran byte. Salah satu fitur yang tidak biasa dari set instruksi baru adalah pengenalan saturasi
aritmatika untuk byte dan kata 16-bit operan. Dengan aritmatika unsigned biasa,
ketika operasi meluap (yaitu, membawa keluar dari bit yang paling signifikan), yang
sedikit tambahan terpotong. Hal ini disebut sebagai sampul, karena efek dari pemotongan dapat, misalnya, untuk menghasilkan hasil samping yang lebih kecil dari dua operan masukan. Pertimbangkan penambahan dua kata, dalam heksadesimal,
F000h dan 3000H. Jumlah tersebut akan dinyatakan sebagai
F000h = 1111 0000 0000 0000
+ 3000H = 0011 0000 0000 0000
10010 0000 0000 0000 = 2000H
Jika dua angka diwakili intensitas gambar, maka hasil penambahan adalah
untuk membuat kombinasi dua warna gelap berubah menjadi lebih ringan. Ini biasanya
tidak apa yang dimaksudkan. Dengan saturasi aritmatika, jika hasil penambahan overflow
atau hasil pengurangan di underflow, hasilnya diatur ke terkecil terbesar atau
nilai representable. Untuk contoh sebelumnya, dengan saturasi aritmatika, kami
memiliki
F000h = 1111 0000 0000 0000
+ 3000H = 0011 0000 0000 0000
10010 0000 0000 0000
1111 1111 1111 1111 = FFFFh
Untuk memberikan nuansa untuk penggunaan instruksi MMX, kita melihat contoh,
diambil dari [PELE97]. Sebuah aplikasi video umum adalah fade-out, fade-in efek,
di mana satu adegan secara bertahap melarutkan ke lain. Dua gambar digabungkan dengan
rata-rata tertimbang:
Result_pixel = A_pixel * fade + B_pixel * (1 - memudar)
Perhitungan ini dilakukan pada setiap posisi pixel di A dan B. Jika seri frame video yang dihasilkan sementara secara bertahap mengubah nilai memudar dari 1 ke 0 (Skala tepat untuk 8-bit integer), hasilnya adalah memudar dari gambar A ke image B.
Gambar 12.11 menunjukkan urutan langkah-langkah yang diperlukan untuk satu set piksel. Itu
komponen pixel 8-bit dikonversi ke elemen 16-bit untuk mengakomodasi MMX 16-bit kemampuan berkembang biak. Jika gambar ini menggunakan 640 * 480 resolusi, dan teknik melarutkan menggunakan semua 255 nilai yang mungkin dari nilai memudar, maka total jumlah instruksi dieksekusi menggunakan MMX adalah 535.000.000. Perhitungan yang sama, dilakukan tanpa instruksi MMX, membutuhkan 1,4 miliar eksekusi instruksi [INTE98].
Jenis Operasi ARM
Arsitektur ARM menyediakan koleksi besar jenis operasi. Pengikut
adalah kategori utama:
• Load dan menyimpan instruksi: Dalam arsitektur ARM, hanya beban dan toko
instruksi mengakses lokasi memori; aritmatika dan logis instruksi yang
dilakukan hanya pada register dan nilai-nilai langsung dikodekan dalam instruksi.
Keterbatasan ini adalah karakteristik dari desain RISC dan dieksplorasi lebih lanjut dalam
Bab 15. arsitektur ARM mendukung dua jenis luas instruksi
bahwa beban atau menyimpan nilai satu register, atau sepasang register, dari atau ke
memori: (1) beban atau menyimpan kata 32-bit atau 8-bit unsigned byte, dan (2) beban
atau menyimpan 16-bit unsigned sindiran, dan memuat dan menandatangani memperpanjang sindiran 16-bit atau 8-bit byte.
• Instruksi Cabang: ARM mendukung instruksi cabang yang memungkinkan bersyarat
depan cabang atau mundur hingga 32 MB. Sebagai program counter
adalah salah satu register tujuan umum (R15), cabang atau melompat juga dapat
dihasilkan dengan menulis nilai ke R15. Sebuah panggilan subroutine dapat dilakukan oleh
varian dari instruksi cabang standar. Serta memungkinkan cabang
maju atau mundur hingga 32 MB, Cabang dengan Link (BL) instruksi
mempertahankan alamat instruksi setelah cabang (alamat pengirim)
di LR (R14). Cabang ditentukan oleh kondisi lapangan 4-bit di
petunjuk.
• Instruksi pemrosesan data: Kategori ini berisi petunjuk logis
(AND, OR, XOR), menambah dan mengurangi petunjuk, dan uji dan bandingkan
instruksi.
• Instruksi Multiply: integer kalikan petunjuk beroperasi pada kata atau
operan sindiran dan dapat menghasilkan hasil yang normal atau panjang. Sebagai contoh,
ada instruksi untuk perkalian yang mengambil dua operan 32-bit dan menghasilkan
Hasil 64-bit.
• Paralel penambahan dan pengurangan instruksi: Selain data normal
pengolahan dan kalikan instruksi, ada satu set Selain paralel dan
instruksi pengurangan, di mana bagian-bagian dari dua operan dioperasikan pada
sejajar. Misalnya, ADD16 menambahkan halfwords atas dua register untuk
membentuk sindiran atas hasil dan menambahkan halfwords bawah
yang sama dua register untuk membentuk sindiran bawah hasilnya. instruksi ini
berguna dalam aplikasi pengolahan gambar, mirip dengan x86 MMX
instruksi.
• Memperpanjang petunjuk: Ada beberapa petunjuk untuk membongkar data dengan tanda
atau nol memperluas byte untuk halfwords atau kata-kata, dan halfwords kata-kata.
• Instruksi akses Status daftar: ARM menyediakan kemampuan untuk membaca dan juga
untuk menulis bagian-bagian dari register status.
KODE KONDISI Arsitektur ARM mendefinisikan empat bendera kondisi yang
disimpan dalam status program daftar: N, Z, C, dan V (negatif, nol, Carry
dan overflow), dengan makna dasarnya sama dengan S, Z, C, dan bendera V dalam arsitektur x86. Keempat bendera merupakan kode kondisi ARM.
Tabel 12.12 menunjukkan kombinasi dari kondisi yang eksekusi bersyarat didefinisikan.
Ada dua aspek yang tidak biasa untuk penggunaan kode kondisi di ARM:
1. Semua instruksi, bukan hanya instruksi cabang, termasuk bidang kode kondisi,
yang berarti bahwa hampir semua instruksi dapat kondisional dijalankan. Apa saja
kombinasi pengaturan bendera kecuali 1110 atau 1111 dalam kondisi instruksi ini
bidang kode menandakan bahwa instruksi akan dieksekusi hanya jika kondisi
bertemu.
2. Semua instruksi pengolahan data (aritmatika, logis) mencakup bit S yang menandakan
apakah instruksi update bendera kondisi.
Penggunaan eksekusi bersyarat dan pengaturan bersyarat dari bendera kondisi
membantu dalam desain program pendek yang menggunakan memori kurang. Di samping itu,
semua instruksi termasuk 4 bit untuk kode kondisi, sehingga ada trade-off dalam
lebih sedikit bit dalam instruksi 32-bit yang tersedia untuk opcode dan operan. Karena
ARM adalah desain RISC yang sangat bergantung pada daftar menangani, ini tampaknya
menjadi wajar trade-off.
Tidak ada komentar:
Posting Komentar