|
mov dh, 33
; ro'yxatga olish dh
|
bet | 62/64 | Sana | 13.05.2024 | Hajmi | 183,36 Kb. | | #230077 |
Bog'liq Системное программирование, практикаmov dh, 33
|
; ro'yxatga olish dh 33 raqami
|
|
mov al, dh
|
; al registriga kiring 33 raqami
|
|
xor ah, ah
|
;qayta tiklash ah
|
|
mov bl, 10
|
; ro'yxatga olish bl 10 raqami
|
|
xor cx, cx
|
; cx (hisoblagich) qayta o'rnatish
|
|
@1:
|
; @1 belgisini qo'ying
|
|
div bl
|
; belgisiz butun sonni (registr ax ) raqamga bo'lish (registr bl )
|
|
boltani surish
|
; boltani stack orqali yuboring
|
|
inc cx
|
; 1 cx ga oshirish ( taymer )
|
|
xor ah, ah
|
;qayta tiklash ah
|
|
yoki bolta, bolta
|
; o'ziga mantiqiy (bit bo'yicha) qo'shish
|
|
jnz @1
|
; agar zf bayrog'i nolga teng bo'lmasa, @1 yorlig'iga o'ting
|
|
@2:
|
; DOS qo'ng'irog'ini uzish - belgili chaqiruv;
|
|
pop bolta
|
; al registriga kiring 10 raqami
|
|
xchg ah, al
|
ah va al operandlari o'rtasida ma'lumotlar almashinuvi
|
|
al, 30h qo'shing
|
; al ga 30 h raqamini qo'shing
|
|
int 29h
|
; DOS qo'ng'irog'ini uzish - belgili chaqiruv
|
|
tsikl @2
|
; tsiklni amalga oshirish - @2 yorlig'iga o'ting
|
|
mov al, 13
|
; al registriga kiring 13 raqami
|
|
int 29h
|
; DOS qo'ng'irog'ini uzish - belgili chaqiruv
|
|
mov al, 10
|
; al registriga kiring 10 raqami
|
|
int 29h
|
; DOS qo'ng'irog'ini uzish - belgili chaqiruv
|
|
ret
|
; DOS funktsiyasi "dasturni tugatish"
|
|
oxiri boshlanadi
|
; dastur kodini tugatish belgisi
|
Bajarilishi kerak bo'lgan vazifa:
1 CEMU 8086 emulyator muharriridan foydalanib , ushbu laboratoriya ishi misollarida manba matni berilgan dasturlarni yozing.
2 * tipidagi bajariladigan fayllarni yarating. com .
3 Olingan dasturlarning ishlashini o'rganish.
4 DS registrining mazmunini aks ettirish dasturini yozing (2.1-misol asosida). Dasturingiz natijasini va tuzatuvchi nimani ko'rsatayotganini solishtiring.
DIV, PUSH , POP , SHL , TEST buyruqlarining ishlashini tavsiflang .
6 Stakka surilgan raqamlar qayerda ekanligini aniqlang (manzillarni toping va yozib oling).
CS registrining mazmunini aks ettirish dasturini yozing (3.1-misol asosida).
8 Muammolarni hal qilishning boshqa usullarini taklif qiling.
Amalga oshirish tartibi:
1. Nazariy materialni o‘rganish.
2.Dastur tuzing.
3. Hisobot tuzing.
Nazorat savollari:
TEST o'rniga SHL buyrug'idan foydalanishning afzalliklari (1.1-misol)?
Jamoalar qanday farq qiladi?
SHL dx, 1
Va
SHL dx, cl
X ning tarkibini stekga qanday surish va uni qaytarib olish mumkin?
O'nlik sanoq sistemasida bayt qiymatini ko'rsatish usulini aytib bering?
O‘n oltilik sanoq sistemasida bayt qiymatini ko‘rsatish usulini aytib bering?
X registrda yozilgan sonning ikkilik kodini chiqarish texnikasini tavsiflab bering
Stak. Ish printsipi. Stack bilan ishlash buyruqlari.
Tandem jamoalari ishidagi farqlarni ko'rsating
DS ni bosing
pop ES
dan
DS ni bosing
pop ES
Tavsiya etilgan o'qish: 1,2, 3.
19-son LABORATORIYA ISHI
Mavzu: Assembly tilida COM ob'ektidan foydalanish
Ishning maqsadi: mashina tilida dasturlashda COM ob'ektlaridan foydalanish qobiliyatini rivojlantirish.
Yakunlash vaqti 2 soat.
Nazariy material
.COM fayl turini o'zgartirib bo'lmaydi. Bunday faylda uni ko'chirish uchun kerakli ma'lumotlar mavjud emas. Buning o'rniga, .COM faylini tuzadigan dastur o'zgartirilishi mumkin bo'lgan buyruq segmentiga ega bo'lishi kerak. Bu shuni anglatadiki, buyruq segmentining o'zi o'zgartirilishi mumkin bo'lsa-da, boshlang'ich ofset har doim bir xil bo'lishi kerak. Bunday dasturda barcha ofsetlar o'zgarishsiz qolishi kerak. Bundan tashqari, dasturchi segment registrlari bilan har qanday operatsiya vaqtida (masalan, segment registriga olingan qiymatni yozish) joriy buyruq segmentining registriga doimo kirishni ta'minlashi kerak. Ko'rsatma segmentining joriy qiymatini DS registriga yozish uchun to'g'ri dastur ketma-ketligiga misol bo'lishi mumkin:
PUSH CS
POPDS
Ba'zan quyidagi buyruqlar ketma-ketligidan foydalangan holda bir xil operatsiyani bajarish vasvasasi bo'lishi mumkin (5.6-rasmda ko'rsatilgan dasturda bo'lgani kabi, buyruq segmentining nomi "KOD" deb faraz qilinadi).
MOV AX, KOD
MOV DS, AX
.COM tipidagi dastur fayli uchun bu yozuv noto'g'ri bo'ladi. Yig'ish va havolani tahrirlash vaqtida CODE segmenti uchun segment qiymati noma'lum. Bu faqat dastur yuklanganda aniqlanadi. .COM fayli yuklovchiga barcha segment havolalari ro'yxatini (ko'chirish uchun ma'lumot) taqdim eta olmaganligi sababli, bu holda dastur to'g'ri bajarilmaydi.
Ta'riflangan fayl turlari o'rtasida segment registrlari qiymatlarini o'rnatish va stekning joylashuvi bo'yicha farqlar mavjud. .COM fayli uchun CS, DS, ES va SS registrlarining qiymatlari dasturni yuklaydigan segmentni ko'rsatish uchun DOS tomonidan o'rnatiladi. SP registri segmentdagi oxirgi mavjud xotira joyiga ishora qilib o'rnatiladi.
Shunday qilib, dastur boshini, stek esa segmentning oxirini egallaydi.
.EXE faylining bosh yorlig'i CS, IP, SS va SP registrlarining qiymatlarini belgilaydi. DOS DS va ES registrlarining qiymatlarini dastur yuklangan segmentga ishora qiladigan tarzda o'rnatadi. CS registri dasturni boshlash manzilini o'z ichiga olgan segmentga ishora qiladi.
Agar .COM faylida dastur 100H ga teng buyruq segmentida boshlang'ich ofsetga ega bo'lishi kerak bo'lsa, u holda .EXE dastur faylida boshlang'ich manzil boshqa qiymatga ega bo'lishi mumkin. Quyida ko'rsatilganidek, ushbu manzilning qiymati END bayonotida bo'lishi mumkin:
END START_LOCATION
Bu assembler-havola muharririga dasturni yuklagandan so'ng boshqaruv START_LOCATION yorlig'iga o'tkazilishi kerakligini ko'rsatadi.
Ikkala fayl turi ham PSP dasturi prefiksidan foydalanadi, bu dastur yuklangan segmentning birinchi 100H baytlari tomonidan shakllantiriladi. .EXE fayli bo'lsa, DS va ES registrlari ushbu ma'lumotlar maydoniga ishora qiladi, CS va SS registrlarining qiymatlari esa mos keladigan montaj havolasini tahrirlash bosqichlarida o'rnatiladi. .COM fayl turi bo'lsa, barcha registrlar PSP ga ishora qiladi. Bu ikkala fayl turini dastur segmenti tartibida saqlangan ma'lumotlarga to'g'ridan-to'g'ri kirishni ta'minlaydi.
.COM faylining afzalligi shundaki, CS registri PSP ga ishora qiladi, .EXE fayli esa yo'q. Dasturni tugatish va boshqaruvni DOS ga o'tkazish bilan bog'liq bo'lgan 20H va 27H uzilishlari uzilish vaqtida registr PSP ga ishora qilishini talab qiladi. .EXE fayli bo'lsa, buni qilish qiyin. Yaxshiyamki, quyidagi buyruqlar ketma-ketligi .EXE kabi dastur faylida boshqaruvni DOS-ga qaytarish imkonini beradi.
DASTUR DASTURI FAR
PUSH DS ; rekord segment PSP dan
MOV AX,0
PUSH AX; stek yozish ofset 0
...
RET
DASTUR ENDP
0-ofsetdagi PSP-ga xos hujayra INT 20H buyrug'ini o'z ichiga oladi. DS registrining holatini va nolni stekga surish PSP manziliga uzoq qaytish manzilini ofset 0da o'rnatadi. Qaytish ko'rsatmasi bajarilgandan so'ng, dastur INT 20H ko'rsatmasiga o'tadi. Ammo shu paytgacha CS registrida allaqachon PSP qiymati bo'ladi va INT 20H uzilish buyrug'i boshqaruvni DOS ga qaytaradi.
Dasturni to'xtatuvchi va boshqaruvni DOS-ga o'tkazadigan, dasturni xotirada saqlaydigan 27H uzilishi uchun shunga o'xshash amalga oshirish usuli mavjud emas. 27H uzilishdan oldin CS registrini to'g'ri qiymatga yozish usullari mavjud bo'lsa-da, odatda dasturni .COM fayli sifatida tashkil qilish osonroq.
Va nihoyat, .COM fayli .COM fayli bilan bir xil dasturga ega .EXE fayliga qaraganda diskda kamroq joy egallaydi. .COM faylida sarlavha yo'qligi sababli, u diskda bo'sh joyni talab qilmaydi. DEBUG dasturining keyingi qismida muhokama qilinganda, .EXE faylini .COM fayliga aylantirish usuli ko'rsatiladi.
.COM faylining .EXE faylidan asosiy farqi mos keladigan obyekt faylining floppi diskda saqlanadigan formatidir. Ikkala turdagi fayllar ham mashina tilida yozilgan dasturlardir.
.COM faylida yozilgan dastur darhol bajarilishi mumkin. DOS uni disketdan to'g'ridan-to'g'ri mashina xotirasiga yuklashi mumkin. Keyin DOS boshqaruvni 100H ofsetdagi buyruqlar uchun ajratilgan xotira segmentiga o'tkazadi. .EXE faylini to'g'ridan-to'g'ri bajarib bo'lmaydi. Floppy diskda saqlangan mos keladigan ob'ekt fayli sarlavhaga ega. U havola muharriri tomonidan yaratilgan ma'lumotlarni o'z ichiga oladi. Uning eng muhim qismi harakat bilan bog'liq ma'lumotlarga tegishli. .COM faylida bitta buyruq segmenti ko'chirilgan bo'lsa, .EXE faylida ko'plab turli segmentlar ko'chirilishi mumkin. Bu .COM faylining maksimal hajmini 64 KB bilan cheklaydi, agar dastur boshqa segmentlarni ham yuklamasa. .EXE fayli dastur maydonida dinamik ravishda harakatlanadigan bir qancha segmentlarni o'z ichiga olishi mumkin.
Mobillik nima? Yig'ish jarayonida dastur xotiraning ma'lum bir joyida joylashgan. Oldin o'rnatilganidek, assembler avtomatik ravishda har bir segmentni ofset 0 da ishga tushiradi. Assambleyalar ro'yxatida ba'zi manzillar yonida R belgilari mavjud, bu manzilni o'zgartirish mumkin. Agar dastur boshida 0 dan farqli ofsetga ega bo'ladigan tarzda o'zgartirilsa, ko'rsatilgan manzilni o'zgartirish kerak. Odatda havola muharriri harakatni boshqaradi. Biroq, dastur yuklanmaguncha ba'zi manzil qiymatlarini qayta hisoblab bo'lmaydi. Har bir .EXE faylida bunday manzillar haqida ma'lumotlar mavjud.
MAQOMOTI ob'ektiga funksiya ko'rsatkichlari jadvaliga ishora qiluvchi ko'rsatgich orqali kirish mumkin (qisqacha virtual funktsiya jadvali yoki vtable deb ham ataladi). Ushbu jadval ob'ekt usullarining har birining manzillarini o'z ichiga oladi. Usulni chaqirish uchun uni ushbu ko'rsatkich jadvali orqali bilvosita chaqirasiz.
|
| |