Dasturni nasm kompilyatori orqali yig'ish uchun buyruqlar qatoriga quyidagi yoziladi


Download 494.54 Kb.
Pdf ko'rish
bet4/4
Sana22.04.2023
Hajmi494.54 Kb.
#1382511
1   2   3   4
Bog'liq
11.2-amaliy

­i,­I 
DIREKTORIYA NOMI
Boshlang'ich fayllarni axtarish uchun qo'shimcha direktoriya 
ko'rsatish. Odatda %INCLUDE makrosiga berilgan boshlang'ich 
fayllar NASM buyrug'i ishga tushirilgan direktoriyadan 
qidiriladi. Ushbu kalit orqali esa NASMning boshlang'ich 
fayllarni axtaradigan direktoriyalariga boshqa direktoriyalarni 
qo'shish mumkin. Masalan, nasm­io.inc fayli dastur 
joylashgan direktoriyada emas, balki shu direktoriya ichidagi 
etc direktoriyasida bo'lsin, u holda:
$ nasm –f elf birinchi_dastur.asm –I etc/
Direktoriya nomidan so'ng (/) ni qo'yishni unutmang! Chunki 
faylning to'liq yo'lini aniqlashda NASM shunchaki direktoriya 
nomiga boshlang'ich fayl nomini qo'shadi.
66


Eslatma
: Albatta bu kalitsiz ham %INCLUDE makrosiga boshlang'ich faylning to'liq yo'lini 
ko'rsatib qo'yish mumkin. Ammo bu holda har safar boshlang'ich faylni boshqa yoqqa 
ko'chirganingizda kompilyatsiyadan oldin dastur kodiga o'zgartirish kiritishga to'g'ri keladi.
­p BOSHLANG'ICH 
FAYL NOMI
Dasturga ko'rsatilgan boshlang'ich faylni qo'shadi. Bu orqali dasturga 
%INCLUDE makrosisiz boshlang'ich fayllarni qo'shish mumkin, 
shunchaki –p kaliti orqali fayllar NASMga beriladi. Masalan, 
dasturimizdagi birinchi qatorni o'chirib tashlangda, yig'ish jarayonida 
quyidagini yozing:
$ nasm –f elf dastur.asm –p nasm­io.inc
­d 
MAKRO[=qiymat]
Bir qatorli makroni kompilyatsiya jarayonida aniqlaydi. Bu kalitdan 
dasturni shartli yig'ishda foydalaniladi («Makro vositalar» bobiga 
qarang). Bu yerda to'rt burchak qavs uni ichidagi narsa bo'lishi ham, 
bo'lmasligi ham mumkinligini bildiradi.
­l 
TAHLIL FAYL 
NOMI
Dasturni yig'ish natijasida vujudga keladigan mashina tilidagi kodni 
maxsus ko'rinishda berilgan faylga yozib beradi. Mashina tilidagi kod 
va manzillar inson tushunishi qiyin bo'lgan ikkilik sanoq tizimida emas, 
balki ixchamroq bo'lgan o'n oltilik sanoq tizimida beriladi. Faylda siz 
tuzgan assembler dasturi va unga qo'shilgan boshlang'ich fayldagi 
dastur o'ng tomonda, unga to'g'ri keladigan mashina kodi esa chap 
tomonda joylashtiriladi. Bu juda ham foydali kalit bo'lib, tuzgan 
dasturingizni mashina tilida qanday bo'lishini ko'rishga imkon beradi. 
Masalan, qiziqish uchun birinchi dasturimizni sinab ko'rishimiz mumkin:
$ nasm –f elf dastur.asm ­l tahlil.txt
Endi tahlil.txt faylini biror bir matn muharriri orqali ochib ko'ramiz. 
Qiziquvchilar uchun dasturning ba'zi qatorlarini tahlil qilamiz.
Birinchi dasturning 11–16 qatorlari:
112 section
.bss 
113 00000000  a resd 1 
114 00000004  b resd 1 
115
116 section .data
117 00000000 59616E612075636872­ xayr db "Yana uchr­
118 00000009 61736867756E636861­ 
ashguncha­
119 00000012 2C20786179722E0
, xayr.",0
25–26 qatorlar:
215 00000094 A1[00000000] mov
eax , [a] 
216 00000099 0305[04000000] add
eax , [b] 
Birinchi ustunda tahlil faylidagi har bir satrning tartib raqami 
joylashgan va bu ustun sizda boshqacha bo'lishi mumkin. Ikkinchi 
ustunda dasturning har bir qatorining foydali manzillari 4 baytli qiymat 
67


sifatida berilgan, ya'ni offsetlar (o'n oltilik sanoq tizimida). Uchinchi 
ustunda esa bevosita qiymatlar va buyruqlarning mashina tilidagi 
kodlari joylashgan. E'tibor bergan bo'lsangiz 11 va 15-qatorlardagi 
section kabi assembler tiliga xos direktivalar mashina tiliga 
o'girilmagan. Barcha bo'limlarning offset manzillari noldan boshlangan. 
a va xayr nishonlari bo'lim boshida joylashgani uchun ularning ham 
manzillari 0x00000000 ga teng. xayr ning 25 baytli boshlang'ich 
qiymati nishon oldida o'n oltilik sanoq tizimida berilgan. a o'zgaruvchisi 
4 baytli bo'lgani sababli b ning manzili shunga qarab 0x00000004 dan 
boshlangan. (25) qatordagi MOV buyrug'i xotiradagi o'zgaruvchi 
qiymatini EAX ga yuklashni anglatadigan 0xA1 mashina kodiga 
o'girilgan va yonida xotira manzili burchakli qavs ichida berilgan. Ushbu 
buyruq qiymati bilan birga 5 bayt o'lchamga ega bo'lgani tufayli keyingi 
buyruq 0x00000099 manzilidan boshlangan: 0x95 + 0x5 = 0x99.
Eslatma
: Windowsda NASM kalitlariga beriladigan fayl nomi yoki mutlaq yo'llar tarkibida 
bo'shliq ( ) belgisi bo'lmasligi kerak. Masalan:
> nasm ­f win32 dastur.asm ­IC:\Program files
ishlamaydi.
68

Download 494.54 Kb.

Do'stlaringiz bilan baham:
1   2   3   4




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling