4-laboratoriya mashg’uloti Assembler tilida oddiy dasturlarni yozish va bajarish

4-laboratoriya mashg’uloti
Assembler tilida
oddiy dasturlarni yozish va bajarish.
Ishdan maqsan: Assembler tilidagi buyruqlar bilan tanishish va
oddiy dasturlarni
yozishni o’rganish.
NAZARIY QISM
Assemblerda quyidagi umumiy maqsadli registrlar keng foydalaniladi.
1) AX registri. AX registri tallagichdir. U xamma kiritish va chiqarish
operatsiyalari va ba’zi satrlarni ustidagi operatsiyalar uchun ishlatiladi. Masalan,
ko’paytirish va bo’lish, siljish komandalar AX registrni ishlatishadi. Ba’zi
buyruqlar, agar AX registrga murojat qilishsa, samaraliroq kodiga ega bo’ladilar:
AX: ! AH ! AL !
2) BX registri. BX registri tayanch (baza) registridir. Bu birgina, “indeks” sifatida
kengaytirilgan adreslashtirish uchun umumiy maqsadli registridir.
BX: ! BH ! BL !
3) CX registri. CX registri schetchikdir. U siklarni qaytarilishini boshqarish,
chapga va unga siljish operatsiyalari uchun ishlatiladi. CX registri xisoblash uchun
xam ishlatiladi.
; dan so’ng izohlarni yozish mumkin
mov qayerga , qayerdan – bu joylashtirish buyrug’i
mul _d – bu ex registrni _d ga ko’paytirish buyrug’i
natija ax ga joylashadi
shl edx,16 – 16 razryadga surish buyrug’i
div cx - ax ni cx ga bo’lish buyrug’i. natija ax ga joylashadi
pop ecx - bu buyruq stekdan qiymatni oladi
sub ecx,eax – bu buyruq ecx dan eax ni ayiradi. Natija ecx ga joylashadi
ISHNI BAJARISH TARTIBI
1. Assembler tilida dasturlash uchun qutidagi dasturlar kerak bo’ladi:
MASM_v9.0 yoki MASM_v10.0 dasturi
natijalarni ko’rish uchun: OLLYDBG.EXE
2. MASM dasturi o’rnatilgan joyda aaa.bat nomli fayl yaratiladi
Faylga bunday nom berishdan maqsad uning barcha fayllardan yuqorida
joylashishi va oson topilishini ta’minlash. Aaa.bat faylga quyidagi axborot
kiritiladi.
ml /c /coff "work.asm"
link /SUBSYSTEM:CONSOLE "work.obj"
work.asm – bu kompilyatsiyalanadigan dastur nomi. Ushbu ma’lumot kiritilgach
va uni saqlab dasturlashga kirishish mumkin
3. Assembler quyidagilarga ega :
- protsessor tipini aniqlash direktivasi,
- dastur boshlanish belgisi,
- dastur tanasi,
- dastur yakuni belgisi
4. Assembler tilida turli o’zgaruvchilar tipi mavjud: belgili va belgisiz
formatdagi tiplar Shortlnt (signed char), Byte (unsigned char), Integer (int), Word
(unsigned int) va boshqalar.
5. Quyidagi ifodani hisoblash dasturini yozsak: a – e/b – de, bu yerda:
a = 5;
b = 27;
c = 86;
е = 1986;
d = 1112;
aaa.bat: work.asm joylashgan yerga uni saqlaymiz,. Agar biz boshqa dasturni
kompilyatsiya qilmoqchi bo’lsak unda aaa.bat ichida yozilgan work fayl nomini
boshqasiga almashtirish kerak bo’ladi. Uni saqlash talab etiladi. Agar dastur
sintaktik xatolarsiz bo’lsa unda exe kengaytmali fayl hosil bo’lishi kerak
6. dastur:
.686 ; protsessor tipini aniqlash direktivasi
.model flat, stdcall ; chiziqli xotira modelini e’lon qilish
Option case map:none ; Windows OT bilin moslashtirish
.data ; ma’lumotlarni aniqlash direktivasi
_a dw 5 ; 16-razryadli xotira omboriga _a nom bilan 5 sonini yozish
_b dw 27 ; yozish _b = 16h
_c dw 86 ; yozish _c = 56h
_e dw 1986 ; yozish _e = 7c2h
_d dw 1112 ; yozish _d = 458
res dw 0 ; res o’zgaruvchisini saqlash uchun xotirani zaxiralash
.code ; buyruqlar segmenti boshlanishi direktivasi
start:
mov edx,0 ; registrlarni tozalash
mov ebx,0
mov ecx,0
mov
ах, _e ; ax registriga _e = 7c2h sonini joylashtiramiz
mul _d ; _e ni _d ga ko’paytiramiz
SHL edx, 16 ; 16 ga ko’chirishni amalga oshiramiz
mov dx,ax
push edx ; qiymatni stekka tashlaymiz
mov edx,0
mov
ах, _e
mov cx, _b
div cx ; ax ni cx ga bo’lamiz
pop ecx ; stekdan qiymatni olamiz
sub ecx, eax ; ayiramiz
mov
ах, _a
sub eax, ecx
mov res, eax
ret ; OT boshqaruviga qaytaramiz
end start ; start nomli dasturni yakunlash
Nazariy topshiriqlar:
1. Qanday buyruqlarni bilib oldingiz?
2. Registr va ularni vazifalarini tushuntiring?
3.Foydalanuvchi registerlarga qaysi registrlar kiradi?
4. Segment registrlari va ularning vazifalarini tushuntiring?
Document Outline
|