Assemblerda dasturlash. Sodda dasturlarni ishlab chiqish



Download 74,12 Kb.
Sana21.11.2019
Hajmi74,12 Kb.
#26714
Bog'liq
1-ma'ruza

1-MA’RUZA

ASSEMBLERDA DASTURLASH. SODDA DASTURLARNI ISHLAB CHIQISH.
REJA:

    1. Assemblerda dasturlash.

    2. Sodda dasturlarni ishlab chiqish

Tayanch so‘z va iboralar

Assembler, ASM, jmp, jz, jnz, test, megabayt, kilobayt, intel, borland int., turbo assembler, tlink.exe, tasm.exe, td.exe, otladchik.



    1. ASSEMBLERDA DASTURLASH.

Kompyuter texnologiyalari taraqqiyoti algoritmlarni yozish - dasturlash tillari uchun yangi turli xil simvolli tizimlarining paydo bo'lish jarayonini aniqlanadi.



1.1 - rasm. Dasturlashtirish tili tasnifi
Ko'plab dasturlash tillari mavjud, biroq biz Assembler tiliga e'tibor qaratamiz.

Hozirgi vaqtda dasturchi Assemblerdan ancha sodda dasturlash tillarini qo'llashi mumkinligiga qaramasdan, Assembler bilimi va unda dasturlash qobiliyati hech qachon ortiq bo'lmaydi. Bu quyidagi dalillar bilan tasdiqlangan:

1. Boshqa dasturiy tillardan talablarni to'liq qondiradigan prilojeniyalar yozish har doim ham mumkin emas. Va ba'zi hollarda butunlay mumkin emas. Assembler dasturlash tilida siz har qanday dasturni yozishingiz mumkin.

2. Ba'zan yuqori darajali dasturlash tillari kerakli tezlikni ta'minlay olmaydi. Assembler'da yaratilgan dasturlar esa har doim tez.

3. Yuqori darajadagi tillarda yaratilgan dasturlarning hajmi Assemblerda yaratilgan dasturlarga qaraganda ancha katta.

4. Assembler tili sizga to'g'ridan-to'g'ri apparat bilan ishlash imkonini beradi, bu esa ba'zi hollarda dasturchiga afzallik va istalgan natijani beradi. Yuqori darajadagi tilda dastur apparat qurilmalari bilan yozma modul orqali ishlaydi, ya'ni dasturchiga biron bir narsani o'zgartirishga ruxsat bermaydi va shuning uchun kerakli natijani olish imkoni ega bo’lmaydi.

5. Assembler tilini bilish faqat yuqori darajadagi tillarda dasturga ega bo'lganlarga nisbatan katta afzallik beradi. Assembler biladigan dasturchi kompyuterning tuzilishini va apparat apparatlarining tuzilishini biladi.

Assembler tili

Assembler tili kompyuterning barcha funktsional birliklarining operatsion tizim bilan o'zaro ta'sirini yaxshiroq tushunishga imkon beradi. Assembler tili - bu operatorlar va protsessor komandalari o'rtasida bir-birini yozishmalarga ega maxsus dasturiy tildir. Har bir protsessor turi yoki protsessorlarning butun oilasi uchun assembler tili mavjud, chunki assembler tili bo'yicha yo'riqnomalar mashina yo'riqnomasi tizimi bilan bir-birini yozishmalarga ega bo'lishi kerak va kompyuter arxitekturasiga muvofiq bo'lishi kerak. Ushbu ma’ruzada 16 bitli 8086-88 Intel protsessoriga oid buyruqlar ko'rsatmalarni o'z ichiga oladi. 8086-88 mikroprotsessorlari birinchi 640 KB (kilobayt) asosiy xotiraga (RAM) va 65536 baytlik kirish/chiqish manzil maydoniga ajratilgan 1 (MB) megabaytning asosiy manzil maydoni bilan ajralib turadi.

Assembler tilining manba kodini mashina ko'rsatmalariga o'zgartiradigan dastur. Assembler dasturlari juda samarali bo'lishi mumkin. Dastur qobiliyatlari va qobiliyatlari teng bo'lgan dasturchilar tomonidan Assembler tilida ishlash yuqori darajadagi tilda yozilgan dasturdan ko'ra ixcham va tezroq dastur ishlab chiqaradi. Bu deyarli barcha kichik va o'rta dasturlar uchun amal qiladi. Assembler tili dasturi juda to'g'ri. Ushbu til dasturchining barcha apparat bilan bevosita ishlashiga imkon berganligi sababli, assembler dasturi boshqa dasturlarda mavjud bo'lmagan narsalarni bajarishi mumkin.

Birlashtiruvchi til dasturini ishlab chiqish va disk raskadrovka qilish vaqt talab qiladigan bo'lsa-da, bu xotirada kam joy ajratadigan va asta-sekin kompyuterlarda ham tezkor tezlikka erishish imkonini beradigan kichik bajariladigan modullarga olib keladi. Assembler tili asosan dasturlarning individual segmentlarini (ish tezligini oshirish va uskunaga bevosita kirish), shuningdek alohida qurilmalarning dasturlashtirilgan xotirasida saqlanadigan tizim dasturlarini yozish uchun ishlatiladi.

Assembler tilining asosiy kamchiliklari, kompyuterning bir turiga yoziladigan dasturni boshqa komputer turlarida ishlatish mumkin emas, chunki har bir kompyuter oilasi uchun boshqa assembler tili ishlatiladi. Agar yaratiladigan dastur turli xil kompyuterlarda ishlatilsa, u yuqori darajadagi tillarda ishlab chiqilishi kerak va u kompyuter arxitekrurasining xususiyatlarini dasturiy ta'minotdan foydalanish qulayligi va portativ kodni olish uchun yashirishi kerak.


    1. ASSEMBLER TILIDA DASTUR ISHLAB CHIQISH.

Assembler tilida dasturlarni ishlab chiqish yuqori darajadagi tillardagi yozish dasturlaridan farq qiladi, chunki xotira va registrlarning mazmunini kuzatishda ko'p e'tibor va tartiblilikni talab etiladi. Shu bilan birga, dasturni ishlab chiqishning keyingi bosqichlarini kuzatish kerak:

• vazifani belgilash va dasturni tuzish;

• har qanday matn muharriri yordamida dasturning matni bilan fayl yaratish;

• Assemblerdan foydalanib dasturni tarjima qilish, xatolar aniqlanganda - ularni matn muharririda to'g'rilab, yana tarjima qilish;

• assemblerning natijasini dasturchi modul yordamida bajariladigan modulga aylantirish;

• ijro etuvchi dasturni ishga tushirish;

• natijalarni tekshirish. Hech narsa topilmasa, xatoni tuzatuvchidan foydalanib, xato topishingiz kerak.

Assembler kodlari bilan yozilgan dasturga manba dasturi deyiladi va uning aylantirilgan shakli mikroprotsessor buyruqlar qatoriga ob'ekt yoki dastur moduli kiradi. Yig’uvchi fayl yoki bajariladigan modul yaratishga imkon beradi. Otladchik - ekranda kerakli o'zgaruvchilar qadriyatlarini ko'rishga, dasturni bosqichma-bosqich bajarishda, barcha registrlarni va xotiralarining holatini olishni, dasturga o'zgartirishlar kiritishni, to’xtash nuqtalarini belgilashni va yana ko'p narsalarni beradigan dasturdir.



Ushbu ma’ruzada Assembler tilida dasturlarni yaratish uchun Borland Int. firmasidan olingan dasturiy mahsulot Turbo Assembler. Turbo Assembler kompilyatori TASM.EXE faylida joylashgan yig’uvchi dastur bo'lib, TLINK.EXE faylida joylashgan. Otladchik tuzuvchisi TD.EXE faylida joylashgan. Assembler tili dasturini kompilyatsiya qilish va ishlash jarayoni quyidagicha.

1.2 - rasm. Dasturni Assembler tilidagi dastur yaratish bosqichlari
Dasturlarni tuzish va otladkasi

Kompilyatsiya bilan ishlashga qulay bo'lishi uchun, mos variantlar bilan kompilyatsiyalovchi va kompilyatsiyani chaqirish o'z ichiga olgan ommaviy ish faylini yaratishingiz mumkin. Bu quyidagicha amalga oshirilishi mumkin.

Matn tahririyatida kengaytmasi bilan matnli fayl yaratish (Uzoq menedjerda). Buni chaqirish, masalan, .bat. Quyidagi satrlarni yozing (tuzish va tuzishchi C: \ ASM katalogida joylashgan):

@ echo off

C: \ ASM \ tasm / zi% 1.asm,% 1.obj,% 1.lst

C: \ ASM \ tlink / v% 1.obj

Ikkinchi satrda kompilyatsiya buyruq satrida ko'rsatiladigan manba dasturiga ega fayl uchun kerakli variantlar bilan chaqiriladi. Uchinchi yo'nalish, birlashtiruvchini exe fayli yaratish uchun chaqiradi. Buyruqlar satriga dasturni kompilyatsiya qilish uchun .bat Myprog yozing (agar manba dasturi Myprog.asm faylida saqlansa)

Tarjimadan so'ng kengaytmali .lst, .map, .exe fayllari joriy katalogda paydo bo'ladi. .Lst kengaytmasi bo'lgan faylda xatolar haqida ma'lumot mavjud. Dasturdagi xatolar ro'yxatidagi faylga qarashga ishonch hosil qiling, keyin ularni to'g'rilashingiz va dasturni qayta tarqatishingiz kerak. Hech qanday xato topilmasa, yaratilgan exe faylini bajarish uchun ishlatishingiz mumkin.

Xatolarni tuzatish uchun Turbo tuzatuvchidan foydalanishingiz mumkin. Buyruqning satriga C: \ASM \ td Myprog.exe yozing. Sizga qulaylik uchun bu chaqirishni ommaviy ish fayli sifatida tashkil qilishingiz mumkin. Ushbu buyruqni bajarganingizdan so'ng disk raskadrovka qilinadi.

Registratsiya tarkibini Veiw\CPU komandasi bilan tanishtiring. Dasturni bosqichma-bosqich bajarish - F8. Chiqaruvchilarni o'chirish - ALT-X.

Assembler tili «Hello world» dasturida

.386


.model flat, stdcall

option casemap: none

include /masm32/include/windows.inc

include /masm32/include/user32.inc

include /masm32/include/kernel32.inc

includelib /masm32/lib/user32.lib

includelib /masm32/lib/kernel32.lib

.data


msg_title db "Title", 0

msg_message db "Hello world", 0

.code

start:


invoke MessageBox, 0, addr msg_message, addr msg_title, MB_OK

invoke ExitProcess, 0

end start

Assembler tilida ikkita sonni qo’shish

.486

.model flat, stdcall



option casemap: none

include /masm32/include/windows.inc

include /masm32/include/user32.inc

include /masm32/include/kernel32.inc

includelib /masm32/lib/user32.lib

includelib /masm32/lib/kernel32.lib


include /masm32/macros/macros.asm

uselib masm32, comctl32, ws2_32


.data
.code

start:


mov eax, 123

mov ebx, -90

add eax, ebx

test eax, eax

jz zero

invoke MessageBox, 0, chr$("В eax не 0!"), chr$("Info"), 0

jmp lexit

zero:


invoke MessageBox, 0, chr$("В eax 0!"), chr$("Info"), 0

lexit:


invoke ExitProcess, 0
end start
Bu erda biz ularni (jz, jmp, test) foydalanib, belgilar va maxsus buyruqlardan foydalanamiz. Biz batafsilroq tahlil qilamiz:

• test - baytlar, so'zlar yoki juft so'zlar shaklida o'zgaruvchan (operandlar) mantiqiy taqqoslash uchun ishlatiladi. Taqqoslash uchun, buyruq mantiqiy ko'payishdan foydalanadi va bitlarga qaraydi: 1 ga teng bo'lsa, unda natijalar biti 1 ga teng bo'ladi, aks holda - 0. Agar biz 0 qabul qilinsak, bayroqlar ZF (nol bayroq) Keyin natijalar ZF asosida tahlil qilinadi.

• jnz - agar ZF bayrog'i biron joyda o'rnatilmagan bo'lsa, bu yorliqqa o'tish amalga oshiriladi. Ko'pincha bu buyruqlar dasturda ZF natijasiga ta'sir ko'rsatadigan taqqoslash operatsiyalari mavjud bo'lsa qo'llaniladi. Ular faqat sinov va cmp.

• jz - ZF bayrog'i hali o'rnatilmagan bo'lsa, sanasi bilan o'tish amalga oshiriladi.

• jmp - ZF yoki yo'qligidan qat'i nazar, bu tegga o'tish amalga oshiriladi.

Assemblerdagi raqamlarning umumiy summasi

Ikkita o'zgaruvchini qo’shish jarayonini ko'rsatadigan dastur:

.486


.model flat, stdcall

option casemap: none

include /masm32/include/windows.inc

include /masm32/include/user32.inc

include /masm32/include/kernel32.inc

includelib /masm32/lib/user32.lib

includelib /masm32/lib/kernel32.lib
include /masm32/macros/macros.asm

uselib masm32, comctl32, ws2_32

.data

msg_title db "Title", 0



A DB 1h

B DB 2h


buffer db 128 dup(?)

format db "%d",0

.code

start:


MOV AL, A

ADD AL, B

invoke wsprintf, addr buffer, addr format, eax

invoke MessageBox, 0, addr buffer, addr msg_title, MB_OK


invoke ExitProcess, 0
end start
.486

.model flat, stdcall

option casemap: none

include /masm32/include/windows.inc

include /masm32/include/user32.inc

include /masm32/include/kernel32.inc

includelib /masm32/lib/user32.lib

includelib /masm32/lib/kernel32.lib


include /masm32/macros/macros.asm

uselib masm32, comctl32, ws2_32

.data

.code


start:

call GetCommandLine ; результат будет помещен в eax

push 0

push chr$("Command Line")



push eax ; текст для вывода берем из eax

push 0


call MessageBox

push 0


call ExitProcess
end start
.486

.model flat, stdcall

option casemap: none

include /masm32/include/windows.inc

include /masm32/include/user32.inc

include /masm32/include/kernel32.inc

includelib /masm32/lib/user32.lib

includelib /masm32/lib/kernel32.lib


include /masm32/macros/macros.asm

uselib masm32, comctl32, ws2_32


.data

.code


start:

call GetCommandLine ; результат будет помещен в eax

invoke GetCommandLine

invoke MessageBox, 0, eax, chr$("Command Line"), 0

invoke ExitProcess, 0

push 0


call ExitProcess
end start
Assembler sikl dasturi:

.data


msg_title db "Title", 0

A DB 1h


buffer db 128 dup(?)

format db "%d",0

.code

start:
mov AL, A



.REPEAT

inc AL
.UNTIL AL==7


invoke wsprintf, addr buffer, addr format, AL

invoke MessageBox, 0, addr buffer, addr msg_title, MB_OK

invoke ExitProcess, 0
end start

.data
msg_title db "Title", 0

buffer db 128 dup(?)

format db "%d",0

.code

start:
mov eax, 1



mov edx, 1
.WHILE edx==1

inc eax


.IF eax==7

.BREAK


.ENDIF

.ENDW


invoke wsprintf, addr buffer, addr format, eax

invoke MessageBox, 0, addr buffer, addr msg_title, MB_OK

invoke ExitProcess, 0

Assemblerda massiv elementlarini qo’shish


.486

.model flat, stdcall

option casemap: none

include /masm32/include/windows.inc

include /masm32/include/user32.inc

include /masm32/include/kernel32.inc

includelib /masm32/lib/user32.lib

includelib /masm32/lib/kernel32.lib


include /masm32/macros/macros.asm

uselib masm32, comctl32, ws2_32


.data

msg_title db "Title", 0

A DB 1h

x dd 0,1,2,3,4,5,6,7,8,9,10,11



n dd 12
buffer db 128 dup(?)

format db "%d",0


.code

start:


mov eax, 0

mov ecx, n

mov ebx, 0

L: add eax, x[ebx]

add ebx, type x

dec ecx


cmp ecx, 0

jne L


invoke wsprintf, addr buffer, addr format, eax

invoke MessageBox, 0, addr buffer, addr msg_title, MB_OK



invoke ExitProcess, 0
end start
NAZORAT SAVOLLARI


  1. Dasturlashtirish tili tasnifi?

  2. Assembler tilida dastur ishlab chiqishning ketma-ketligi.

  3. Assembler tilida ikkita sonni qo’shish.

  4. Assemblerda massiv elementlarini qo’shish.

  5. Assembler sikl dasturlari.

Download 74,12 Kb.

Do'stlaringiz bilan baham:




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

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish