Amaliy mashg’ulot №3-4



Yüklə 27,77 Kb.
səhifə1/2
tarix14.12.2023
ölçüsü27,77 Kb.
#180081
  1   2
Amalioy 3-4

Amaliy mashg’ulot - № 3-4


ASSEMBLER TILIDA ODDIY DASTURLAR YOZISHNI O‘RGANISH
Ishdan maqsad: assembler dasturining tuzilishi bilan tanishish, assembler tilida birinchi dastur yaratish.Структура ассемблерной программы
Dastur har qanday OT tomonidan bajarilishi uchun uni bajariladigan faylga kompilyatsiya qilish kerak. DOS da bajariladigan fayllarning asosiy ikkita formati COM va EXE hisoblanadi.
MAQOMOTI tipidagi fayllar dastur haqida hech qanday qo'shimcha ma'lumotsiz faqat kompilyatsiya qilingan kodni o'z ichiga oladi.Barcha kod, ma'lumotlar va stek bir segmentga joylashtirilgan va 64 KB dan oshmasligi kerak.




. model tiny




. code




org 100h




begin:




mov ah, 9




mov dx,offset message




int 21h




ret




message db "Привет", 0dh, 0ah, '$'




end begin

Uning qanday ishlashini tushunish uchun dasturning manba kodini ko'rib chiqaylik.


Birinchi qator kod, ma'lumotlar va stek segmentlarini birlashtirgan TINY xotira modelini belgilaydi. Ushbu model COM tipidagi fayllarni yaratish uchun mo'ljallangan.
DOS da manzilni shakllantirish uchun segment va ofset ishlatiladi. "SALOM" qatorining manzilini shakllantirish uchun DS (segment) va DX (ofset) juftlik registrlari qo'llaniladi. *.com dasturini xotiraga yuklashda barcha segment registrlari dasturimiz yuklangan segmentga teng qiymatni oladi (jumladan, DS). Shuning uchun chiziq segmentini DS ga yuklashning hojati yo'q (u allaqachon yuklangan).
Direktiv. CODE kod segmentini boshlaydi, bizning holatlarimizda ma'lumotlar ham bo'lishi kerak.
ORG 100h dastur hisoblagichini (IP) 100 soatga o'rnatadi, chunki MAQOMOTI fayli xotiraga yuklanganda DOS PSP ma'lumotlar bloki bilan birinchi 256 baytni (100 soat) egallaydi va dastur kodini faqat shu blokdan keyin joylashtiradi. COM tipidagi fayllarga kompilyatsiya qilingan barcha dasturlar ushbu direktiva bilan boshlanishi kerak.
BEGIN: belgisi dasturning birinchi buyrug'idan oldin joylashgan bo'lib, dastur qaysi buyruq bilan boshlanishini ko'rsatish uchun END direktivasida (Begin - inglizcha start; end - end) ishlatiladi.
Umuman olganda, BEGIN so'zi o'rniga boshqa narsa ishlatilishi mumkin. Masalan, START:. Bunday holda, biz END START dasturini bajarishimiz kerak bo'ladi.
(5) - (7) qatorlar “SAlom” xabarini aks ettiradi.
Keling, protsessor registrlarini qisqacha ko'rib chiqaylik.
Protsessor registri - bu raqamni saqlash uchun maxsus ajratilgan xotira.
Masalan:
Agar biz ikkita raqamni qo'shmoqchi bo'lsak, matematikada buni quyidagicha yozamiz:
A=5
B=8
C=A+B.
A, B va C - bu registrlarning bir turi (agar biz kompyuter haqida gapiradigan bo'lsak), unda ba'zi ma'lumotlar saqlanishi mumkin. A=5 quyidagicha o'qilishi mumkin: A ga 5 raqamini bering.
Registrga qiymat berish uchun Assemblerda mov operatori mavjud (inglizcha move – yuklashdan). MOV AH,9 buyrug'i AH registriga 9 raqamini joylashtiradi - DOS "chiqarish chizig'i" funktsiyasining raqami.
MOV DX, OFFSET MESSAGE buyrug'i DX registriga MESSAGE yorlig'ining ofsetini ma'lumotlar segmentining boshiga nisbatan joylashtiradi, bu bizning holatlarimizda kod segmentiga to'g'ri keladi.
OFFSET (ingliz tilida bu ofset). Yig'ish jarayonida assembler ushbu qatorga yetib borgach, xotiradagi OFFSET MESSAGE ni shu qatorning MANZILI (ofset) bilan almashtiradi. Agar biz OFFSET MESSAGE yozsak (garchi MOV DX, WORD OFFSET MESSAGE to'g'riroq bo'lardi), u holda manzil (ofset) emas, balki satrimizning dastlabki ikki belgisi (bu holda “Pr”) DX ga yuklanadi. DX o'n olti bitli registr bo'lgani uchun unga faqat ikki bayt yuklanishi mumkin (bitta belgi har doim bir bayt).
INT 21H buyrug'i DOS tizimi funksiyasini chaqiradi (inglizcha interrupt - uzilish). INT 21H liniyasini INT 33 bilan almashtirishingiz mumkin, dastur to'g'ri ishlaydi. Biroq, assemblerda uzilish sonini o'n oltilik tizimda ko'rsatish odatiy holdir.
MS-DOS uzilishi - bu doimiy xotirada joylashgan va istalgan vaqtda istalgan dasturdan chaqirilishi mumkin bo'lgan bir xil ichki dastur (MS-DOS qismi).
Bu buyruq dasturlar va operatsion tizim o'rtasidagi o'zaro aloqaning asosiy vositasidir. Misolda 9-raqamli DOS funktsiyasi chaqiriladi - ekranda chiziqni ko'rsatish. Bu funksiya boshidan manzili DS: DX registrlarida ko'rsatilgan satrni birinchi duch kelgan $ belgisigacha chop etadi. MAQOMOTI fayli ishga tushirilganda, DS registriga dasturning segment manzili avtomatik ravishda yuklanadi va DX registri avvalgi buyruq bilan tayyorlangan.
Masalan yordamida yuqoridagilarni ko'rib chiqaylik (kichik bosma yozuvlarni ta'kidlang):
Ikki raqam qo'shish uchun dastur
Dasturning boshlanishi
A=5 A o'zgaruvchiga 5 qiymatini qo'yamiz
B=8 o‘zgaruvchining B qiymatiga 8
Qo'shish pastki dasturini chaqirish
endi C 13 ga teng
A=10 bir xil, faqat boshqa raqamlar
B=25
Qo'shish pastki dasturini chaqirish
endi C 35 ga teng
Dasturning oxiri…
Subprogramma qo'shimchasi
C=A+B
Pastki dasturdan qayting, biz qo'ng'iroq qilgan joyga qaytamiz
Subprogrammaning oxiri
Bu misolda qo'shish pastki dasturni ikki marta chaqirdik, unga A va B o'zgaruvchilarda o'tkazilgan ikkita raqam qo'shildi. Natija C o'zgaruvchisiga joylashtiriladi. Subprogramma chaqirilganda, kompyuter qaerdan chaqirilganini eslab qoladi va keyin, pastki dastur ishlashni tugatgandan so'ng, kompyuter chaqirilgan joydan qaytib keladi. Bu. Istalgan joydan pastki dasturlarga cheksiz ko'p marta qo'ng'iroq qilishingiz mumkin.
RET buyrug'i odatda protseduradan qaytish uchun ishlatiladi. DOS RET buyrug'i dasturni chiroyli tarzda tugatishi uchun MAQOMOTI dasturlarini chaqiradi.
DOS, MAQOMOTI faylini chaqirganda, dastur segmenti manzilini va stekga nolni joylashtiradi, shuning uchun RET boshqaruvni joriy segmentning nol manziliga, ya'ni PSP ning birinchi baytiga o'tkazadi. Boshqarishni DOS ga qaytarish uchun foydalaniladigan INT 20H buyruq kodi mavjud. Dasturni INT 20h buyrug'i bilan darhol tugatishingiz mumkin, garchi bu 1 bayt ko'proq bo'lsa.
Quyidagi misol qatori “HELLO” matnini, ODh kodi bilan ASCII vagonni qaytarish boshqaruv belgisini, 0Ah kodli ASCII satr tasmasi boshqaruv belgisini va satrni tugatuvchi $ belgisini (agar biz uni olib tashlasak, 21h) o‘z ichiga olgan ma’lumotlar qatorini belgilaydi. uzilish davom etadi, agar $ belgisi xotirada biror joyda paydo bo'lmasa, biz ekranda "axlat" ni ko'ramiz.Birinchi so'z (xabar) xabarning nomi. U har qanday bo'lishi mumkin (masalan, tartibsizlik yoki string , va boshqalar.). Boshqaruv belgilari (ODh va 0Ah) kursorni keyingi qatorning birinchi holatiga o'tkazadi.
END direktivasi dasturni tugatadi va uning bajarilishi qaysi nuqtada boshlanishi kerakligini ko'rsatadi.
Qo'shimcha misol sifatida, keling, boshqa string yarataylik, biz uni message1 deb nomlaymiz. Keyin (9) qatordan boshlab quyidagi buyruqlarni kiriting va dasturni qayta kompilyatsiya qiling.

9

mov dx,offset message1

10

int 21h

11

int 20h

12

message db "Привет", 0dh, 0ah, '$'

13

message1 db "Группа", 0dh, 0ah, '$'

14

end begin




Yüklə 27,77 Kb.

Dostları ilə paylaş:
  1   2




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin