|
Amaliy ish № Mashina kodlarida kompyuterning ishlash tamoyillarini o'rganish
|
bet | 5/9 | Sana | 16.01.2024 | Hajmi | 65,57 Kb. | | #138870 |
Bog'liq 2-Amaliy ishmanzillar
|
mazmuni
|
Izohlar
|
100,101
|
jmp 10A
|
dasturning boshiga (ma'lumotlarni chetlab o'tish)
|
102,103
|
3
|
x
|
104.105
|
7
|
y
|
106,107
|
4
|
z
|
108,109
|
0
|
r
|
Endi biz kerakli o'zgarishlarni amalga oshiramiz. Barcha kerakli harakatlar avvalgisining davomi bo'lgan quyidagi protokolda qayd etilgan.
Keling, dasturning asosiy qismini yangisiga 2 bayt bo'shatish uchun ko'chiraylik
o'zgaruvchan. Buni amalga oshirish uchun m 108 113 10a buyrug'ini kiriting, bu tuzatuvchidan baytlarni 108 dan 113 gacha ko'chirishni so'rashni anglatadi (biz bu qiymatlarni dastur bilan oldingi tajribalardan esladik). Keling, dastur haqiqatan ham 10a manzilida joylashganligini tekshirib ko'raylik. Keyinchalik, ayirish buyrug'i uchun baytlarni bo'shatish va uni kiritish mumkin, lekin oxirgi 3 ta buyruqni qayta yozish osonroq bo'lar edi, ayniqsa, natijani r o'zgaruvchisiga yozish buyrug'i hali ham manzilni o'zgartirishni talab qiladiganligi sababli. Shunday qilib, keling, ushbu buyruqlarni 111-manzildan kiritamiz va keyin o'tishni boshlash yo'riqnomasida manzilni o'zgartirishni unutmang. Keyinchalik, e 106 4 0 buyrug'idan foydalanib, biz uning son qiymatini z o'zgaruvchisiga kiritamiz (yana teskari tartibda!) va yana hamma narsani tekshiramiz. Nihoyat, dasturni ishga tushiramiz va natija to'g'ri ekanligiga ishonch hosil qilamiz: 3 + 7 - 4 = 6.
Shunday qilib, eng oddiy dastur bilan ishlaganimizdan so'ng, biz dasturni o'zgartirishda manzillar va o'zgaruvchilar va o'tishlarni almashtirish juda ko'p mehnat talab qiladigan ish ekanligiga amin bo'ldik, bu juda katta e'tibor talab qiladi (lekin barcha harakatlarga qaramay, xatolar muqarrar ravishda sodir bo'ladi). Protsessor buyruqlarida dasturni amalga oshirish uchun assemblerdan foydalansangiz, bu qiyinchiliklardan xalos bo'lishingiz mumkin. Assemblerning Debug dasturiga nisbatan asosiy afzalligi shundaki, assembler hech qayerda maxsus operativ xotira manzillaridan foydalanmaydi - buning o'rniga hamma joyda identifikatorlar deb ataladigan ramziy nomlar ko'rsatiladi. Dastur matnini tarjima qilishda assembler avtomatik ravishda identifikatorlarni ular joylashgan xotira kataklarining manzillari bilan bog'laydi. Natijada, dastur matnini o'zgartirish manzillarni qayta hisoblashni talab qilmaydi,
Assembler dasturimizning matni shunday bo'ladi. jmp boshlash
x: dw 3
y: dw 7 z: dw 4 r: dw 0
start: mov ax,x qo'shish ax,y
sub ax,z mov r,ax int 20
Yuqorida ko'rib chiqilgan dasturni o'zgartirish uchun ikkita ajratilgan qatorni kiritish kifoya ekanligini tushunish oson. Afsuski, Debug identifikatorlardan foydalanishga ruxsat bermaydi, ya'ni bu masalada assemblerdan sezilarli darajada past. Biroq, hech kim ushbu dasturiy vosita to'liq huquqli assembler ekanligini va'da qilmagan.
Assembly tili bir qator maxsus boshqaruv iboralarini (odatda direktivalar deb ataladi) o'z ichiga oladi, ulardan Debug faqat bir nechtasini qo'llab-quvvatlaydi. Xususan, xotirada ma'lum bir konstantani belgilovchi dw 3 buyrug'i tuzatuvchi tomonidan qo'llab-quvvatlanadigan bunday direktivalardan biridir. Shu bilan birga, assemblerda Debug [2] da etishmayotgan bir qancha direktivalar mavjud. Aytgancha, qo'shimcha direktivalar mavjudligi sababli, ularning ba'zilari assembler dasturida yozilishi kerak, Debug dasturini joriy qilish osonroq. Ammo assembler qo'shimcha direktivalar tufayli kuchliroq bo'ladi; masalan, montaj dasturining alohida bo'limlari shartlar ichida joylashtirilishi mumkin, shuning uchun ularning bajarilishi yoki bajarilmasligiga qarab turli xil kodlar hosil bo'ladi.
Shunday qilib, Debug so'zning to'liq ma'nosida montaj dasturi emasligi ma'lum bo'ldi, garchi u buyruqlar uchun montaj mnemonikasini kiritish imkonini beradi. Shuning uchun, Debug-da ishlash orqali biz haqiqiy assembly tilidagi barcha imkoniyatlarni amalga oshirmaymiz.
E'tibor bering, assemblerning yaxshi tushunchasi "Malyutka" va "Neumann" o'quv kompyuterlarini tavsiflovchi maktab darsliklarida [3-6] berilgan (kitoblarda [4,6] batafsilroq tavsif berilgan). Assembler yordamiga ega bo'lgan ushbu modellarning dasturiy ta'minoti bilan amaliy ishlash ayniqsa foydalidir.
Yana bir tajriba sifatida biz o'zingizni loyihalashni taklif qilamiz assembler G'oyaning asosiy afzalligi, albatta, uning amaliy foydaliligi emas. natijada olingan mahsulot, lekin dasturni yozish jarayonida biz buni yaxshiroq tushunamiz dasturni yig'ish tamoyillari.
4-jadval
|
| |