Jadval 1.4. X86 assembler operatsiyalari kodlari jadvalining bir nechta elementlari
Operatsiya kodi
|
Birinchi operand
|
Ikkinchi operand
|
O'n oltilik kod
|
Buyruq uzunligi
|
Buyruq sinfi
|
AAA
|
--
|
--
|
37
|
1
|
6
|
ADD
|
EAX
|
Immed32
|
05
|
5
|
4
|
ADD
|
Reg
|
Reg
|
01
|
2
|
19
|
AND
|
EAX
|
Immed
|
25
|
5
|
4
|
AND
|
reg
|
reg
|
21
|
2
|
19
|
Misol sifatida ADD opcode-ni ko'rib chiqing. Agar ADD buyrug'ining birinchi operandi EAX registr, ikkinchisi esa 32 bitli konstanta (immed32) bo'lsa, u holda 0x05 opcode ishlatiladi va buyruq uzunligi 5 bayt (8 va 16 bitlarda ifodalanishi mumkin bo'lgan doimiylar uchun) , jadvalda ko'rsatilmagan kodlar). Agar ADD buyrug'ining ikkala operandlari ham registrlar bo'lsa, buyruq uzunligi 2 bayt, opkodi esa 0x01. Ushbu qoidaga mos keladigan barcha opcode va operand kombinatsiyalari 19-sinf bo'lib, operand sifatida ikkita registrga ega ADD yo'riqnomasi bilan bir xil tarzda ko'rib chiqiladi. Buyruqlar sinfi berilgan turdagi barcha buyruqlarni qayta ishlash uchun chaqiriladigan protsedurani aniqlaydi.
Ba'zi assemblerlarda to'g'ridan-to'g'ri adreslash yordamida ko'rsatmalar yozish mumkin, hatto tegishli ko'rsatma chiqish tilida bo'lmasa ham. "Pseudo-to'g'ridan-to'g'ri" manzilli bunday buyruqlar quyidagicha qayta ishlanadi. Assembler dastur oxirida bevosita operandga xotira hududini belgilaydi va unga kiradigan buyruqni hosil qiladi. Misol uchun, IBM 3090 umumiy maqsadli kompyuterda bevosita manzillari bo'lgan ko'rsatmalar mavjud emas. Biroq, 14 registrga to'liq so'zli doimiy 5 ni yuklash uchun dasturchi quyidagi buyruqni yozishi mumkin: L 14,=F'5'
Shunday qilib, dasturchi so'zni xotiraga joylashtirish, unga 5 qiymatini belgilash, unga teg berish va keyin L buyrug'ida ushbu belgidan foydalanish uchun direktivani yozishi shart emas. Assembler xotirani avtomatik zahiraga qo'yadigan konstantalar literallar deyiladi. Literallar dasturni o'qish va tushunishni osonlashtiradi; ular bilan konstantaning ma'nosi dastlabki operatorni o'qiyotganda allaqachon ayon bo'ladi. Birinchi o'tishda assembler dasturda ishlatiladigan barcha literallarni tuzadi. Biz misol qilib olgan uchta kompyuterda ham bevosita manzilli buyruqlar mavjud, shuning uchun ularning assemblerlari literallarni qo'llab-quvvatlamaydi. To'g'ridan-to'g'ri manzilga ega buyruqlar endi juda keng tarqalgan deb hisoblanadi, garchi ular ilgari mutlaqo ekzotik narsa sifatida ko'rilgan bo'lsa ham. Ehtimol, literallarning mashhurligi ishlab chiquvchilarni to'g'ridan-to'g'ri murojaat qilish juda yaxshi fikr ekanligiga ishontirdi. Agar harflar kerak bo'lsa, yig'ish paytida literal jadval saqlanadi, unda har safar harfga duch kelganda yangi element paydo bo'ladi. Birinchi o'tishdan so'ng jadvallar tartiblanadi va ikki nusxadagi elementlar o'chiriladi. 1.5 ro'yxati assemblerda birinchi o'tish uchun asos bo'lishi mumkin bo'lgan protsedurani ko'rsatadi. Buyruqlarning nomlari ularning mohiyati aniq bo'lishi uchun tanlangan. Ushbu ro'yxat assemblerni o'rganish uchun yaxshi boshlanish nuqtasini taqdim etadi. Bu juda qisqa va tushunarli va undan keyingi qadam nima bo'lishi kerakligini ko'rishingiz mumkin - ushbu ro'yxatda aytib o'tilgan protseduralarni yozish.
Do'stlaringiz bilan baham: |