4.5-rasm. Pentium 4 assemblerida N = I + J ifodani hisoblash.
FORMULA:
|
MOVE.L
ADD.L
MOVE.L
|
I.DO
J.DO
DO.N
|
:Registr DO=1
:Registr DO=I+J
N=I+J
|
I
|
DC.L
|
3
|
4 bayt ajratish va ularga 3 qiymatini yozish
|
J
|
DC.L
|
4
|
4 bayt ajratish va ularga 4 qiymatini yozish
|
N
|
DC.L
|
0
|
4 bayt ajratish va ularga 0 qiymatini yozish
|
4.6-rasm. Motorola 680x0 assemblerida N = I + J ifodani hisoblash.
FORMULA:
|
SETHI
LD
SETHI
LD
NOP
ADD
SETHI
ST
|
%HI(I).%R1
[%R1+%LO(I)].%R1
%HI(J).%R2
LD[%R2+LO(J)].%R2
%R1,%R2,%R2
%HI (N), %R1
%R2.[%R1+%LO(N)]
|
R1=I adresning katta bitlari
R1=I
R2=I adresning katta bitlari
R2=J
J-ni xotiradan olib yozilishini kutish
R2=R1+R2
R1=N adresining katta bitlari
|
I
|
. WORD
|
3
|
4 bayt ajratish va ularga 3 qiymatini yozish
|
J
|
. WORD
|
4
|
4 bayt ajratish va ularga 4 qiymatini yozish
|
N
|
. WORD
|
0
|
4 bayt ajratish va ularga 0 qiymatini yozish
|
4.7-rasm. UltraSPARC assemblerida N = I + J ifodani hisoblash.
Assembler operatorlari to‘rtta qismdan iborat yozuvlar qatori ko‘rinishida bo‘ladi: metkalar, amallar, operandalar va izohlar. Metkalar asosiy xotira adreslarini simvollarda ifodalangan nomlari sifatida ishlatiladi. Ular yordamida buyruqlar va ma’lumotlarga o‘tish amalga oshirladi, ya’ni asosiy xotiraning buyruqlar va ma’lumotlar saqlandigan joyiga (adresiga) murojaat qilish mumkin bo‘ladi. Agar operatorga ham metka qo‘yiladigan bo‘lsa, u qatorning boshlanishida yoziladi. Keltirilgan misollarning mohiyatini, ulardan birinchisi asosida ko‘rib chiqamiz. Ushbu va keyingi misollarda ham, birinchi qatorda yozilgan FORMULA, I, J va N lar – metkalar hisoblanadi. Keyingi qatorda buyruqlar – MOV, ADD va direktivalar – DD joylashgan. Uchinchi qatorda protsessorning ichki registrlari va o‘zgaruvchilarning nomlari, to‘rtinchi qatorda esa izohlar keltirilgan. Ko‘rilayotgan birinchi misolda Pentium 4 protsessorining asosiy ichki registri hisoblangan EAX registridan foydalanilgan (3.13-rasmga qaralsin). Bunda avval I o‘zgaruvchini EAX registriga yozib olish buyrug‘i – MOV EAX, I, keyin esa EAX registri qiymatiga J o‘zgaruvchini qo‘shish buyrug‘i – ADD EAX, J va EAX registrida hosil bo‘lgan natija N ning qiymatini xotiraga qaytib yozish buyruqlari - MOV N, EAX lar keltirilgan. Oxirigi uchta qatorda I, J va N lar uchun asosiy xotiradan 32-razryadli so‘z uzunligidagi joylar ajratish direktivalari keltirilgan. Direktiva deganda – assemblerning o‘zi uchun mo‘ljallangan buyruqlar tushuniladi. Quyidagi 4.1-jadvalda Pentium 4 protsessori assembleri deriktivalarining ba’zilari keltirilgan.
4.1-jadval. Pentium 4 protsessori assembleri deriktivalari.
Direktiva
|
Tavsifi
|
SEGMENT
|
Ma’lum bir tashkil etuvchilardan iborat yangi segmentning (matn, ma’lumotlar va h.k.) boshlanishi
|
ENDS
|
Navbatdagi segmentining tugashi
|
ALIGN
|
Keyingi buyruqni yoki ma’lumotlarni joylashtirishni boshqarish
|
EQU
|
Berilgan ifodagi teng bo‘lgan yangi simvolni aniqlash
|
DB
|
Bitta yoki bir nechta baytlar uchun xotiralardan joy ajratish
|
DW
|
Bitta yoki bir nechta 16 razryadli so‘zlar uchun xotiralardan joy ajratish
|
DD
|
Bitta yoki bir nechta 32 razryadli so‘zlar uchun xotiralardan joy ajratish
|
Motorola 680x0 va UltraSPARC protsessorlari uchun yozilgan dasturlar Pentium 4 protsessori uchun yozilgan dasturdan, ulardagi belgilar va nomlarning bir oz farq qilishi bilan ajralib turadilar. Masalan Motorola 680x0 protsessorlarida ichki registlar D0, D1, D2 deb, UltraSPARC protsessorlarida esa %R1, %R2 deb belgilangan. Ko‘chirib yozish buyruqlari esa – MOVE, LD, ST qisqartmalar kabi belgilangan. Makroslar. Dasturlarda ba’zi buyruqlar ketma-ketligi, bir-necha marta qaytarilish hollari ko‘p uchraydi. Assembler tilida bunday ketma-ketliklarni biron-bir nom bilan belgilab, ularni keyingi qaytarilish joylarida, o‘sha nom bilan yana ishlatish mumkin bo‘ladi. Ana shunday nomlangan buyruqlar ketma-ketligi – makros deb ataladi. Quyida Pentium 4 protsessori uchun yozilgan assembler dasturi keltirilgan. Unda P va Q o‘zgaruvchilar qiymatlari joylarini o‘zaro, ikki marotaba almashtirish talab etiladi. Bunda buyruqlarning asosiy ketma-ketligi quyidagicha bo‘ladi:
MOV EAX.P
MOV EBX.Q
MOV Q.EAX
MOV P.EBX
P va Q o‘zgaruvchilar qiymatlari joylarini o‘zaro, makrossiz ikki marotaba almashtirish quyidagicha amalga oshiriladi:
MOV EAX.P
MOV EBX.Q
MOV Q.EAX
MOV P.EBX
MOV EAX.P
MOV EBX.Q
MOV Q.EAX
MOV P.EBX
Ushbu ketma-ketlikni SWAP nomli makros deb belgilasak, P va Q o‘zgaruvchilar qiymatlari joylarini o‘zaro, ikki marotaba almashtirish dasturini quyidagicha yozish mumkin:
SWAP MACRO
MOV EAX.P
MOV EBX.Q
MOV Q.EAX
MOV P.EBX
ENDM
SWAP
SWAP
Makroslar – makrosning nomi, makros tarkibiga kirgan buyruqlar va makrosning tugash joyini bildiruvchi ENDM, direktivasidan iborat bo‘ladi. Quyidagi misollarda makroslarda ishtirok etadigan o‘zgaruvchilar har-xil bo‘lganda, qanday yo‘l tutilishi ko‘rsatilgan. Bunday makroslar parametrlarga ega makroslar deb ataladi.
MOV EAX.P CHANGE MACRO P1.P2
MOV EBX.Q MOV EAX.P1
MOV Q.EAX MOV EBX.P2
MOV P.EBX MOV P2.EAX
MOV P1.EBX
ENDM
MOV EAX.R
MOV EBX.S CHANGE P.Q
MOV S.EAX
MOV R.EBX CHANGE R.S
Assembler tilida yozilgan dasturlarni mashina kodlariga o‘tkazish – translyasiya qilish ikki o‘tishda (rus tilida – проход) amalga oshiriladi. Birinchi o‘tishda dasturda ishtirok etadigan barcha simvollar ketma-ketliklariga – metkalar va o‘zgaruvchilarning nomlariga mos keladigan simvollar jadvali tuzib olinadi. Simvollar jadvalini tuzish jarayonida, dastur bajarilayotgan paytda metkalarga to‘g‘ri keladigan asosiy xotira adreslarini aniqlab olish amalga oshiriladi. Dastur bajarilayotgan paytda bu adreslar buyruqlar adresi sanagichiga – ILCga (Instruction Location Counter, rus tilida – счетчик адресов команд) yozib boriladi. Quyida keltirilgan misolda, izohlar yoziladigan qismining oxirigi qatorida aynan buyruqlar adresi sanagichining qiymatlari ko‘rsatilgan. Ushbu qatordan chapda joylashgan raqamlar qatori esa, har bir buyruq asosiy xotiraning nechtadan baytini egallayotganligi ko‘rsatilan.
MARIA
|
MOV
MOV
|
EAX.I
EBX.J
|
:EAX=I
:EBX=J
|
5
6
|
100
105
|
ROBERTA
|
MOV
IMUL
IMUL
IMUL
|
ECX.K
EAX.EAX
EBX.EBX
ECX.ECX
|
:ECX=K
EAX=I*I
EBX=J*J
ECX=K*K
|
6
2
3
3
|
111
117
119
122
|
MARILYN
|
ADD
ADD
|
EAX.EBX
EAX.ECX
|
EAX=I*I+J*J
EAX=I*I+J*J+K*K
|
2
2
|
125
127
|
STEPHANY
|
JMP
|
DONE
|
DONE ga o‘tish
|
5
|
129
|
Keltirilgan dastur uchun hosil qilingan simvolli nomlar jadvali.
Simvolli nomlar
|
Qiymatlari
|
Boshqa ma’lumotlar
|
MARIA
|
100
|
|
ROBERTA
|
111
|
|
MARILYN
|
125
|
|
STEPHANY
|
129
|
|
Ikkinchi o‘tishda esa ob’yektli dasturni (rus tilida – объектная программа) hosil qilish va assembler protokolini bosmaga chiqarish amalga oshiriladi.
Ko‘pgina dasturlar bittadan ortiq muolajalardan (rus tilida – процедуры) iborat bo‘ladi. Alohida-alohida translyasiya qilingan dasturlarni birlashtirib, bitta butun bajariladigan ikkilik kodga aylantirish vazifasini joylashtiruvchi dastur (rus tilida – компоновщик) amalga oshiradi (4.8-rasm).
4.8-rasm. Dasturni translyasiya qilish va joylashtirish.
Assemblerlash jarayoni
Assembler operatorlari to‘rtta qismdan iborat yozuvlar qatori ko‘rinishida bo‘ladi: metkalar, amallar, operandalar va izohlar.
Metkalar asosiy xotira adreslarini simvollarda ifodalangan nomlari sifatida ishlatiladi. Ular yordamida buyruqlar va ma’lumotlarga o‘tish amalga oshiriladi, ya’ni asosiy xotiraning buyruqlar va ma’lumotlar saqlandigan joyiga (adresiga) murojaat qilish mumkin bo‘ladi.
Agar operatorga ham metka qo‘yiladigan bo‘lsa, u qatorning boshlanishida yoziladi.
Keltirilgan misollarning mohiyatini, ulardan birinchisi asosida ko‘rib chiqamiz. Ushbu va keying misollarda ham birinchi qatorda yozilgan, FORMULA, I, J va N lar – metkalar hisoblanadi.
Keyingi qatorda buyruqlar - MOV, ADD va direktivalar – DD joylashgan. Uchinchi qatorda protsessorning ichki registrlari va o‘zgaruvchilarning nomlari, to‘rtinchi qatorda esa izohlar keltirilgan. Assembler tilida yozilgan dasturlarni mashina kodlariga o‘tkazish – translyasiya qilish ikki o‘tishda amalga oshiriladi.
Birinchi o‘tishda dasturda ishtirok etadigan barcha simvollar ketma- ketliklariga – metkalar va o‘zgaruvchilarning nomlariga mos keladigan simvollar jadvali tuzib olinadi. Simvollar jadvalini tuzish jarayonida, dastur bajarilayotgan paytda metkalarga to‘g‘ri keladigan asosiy xotira adreslarini aniqlab olish amalga oshiriladi.
Dastur bajarilayotgan paytda bu adreslar buyruqlar adresi sanagichiga ILCga (Instruction Location Counter) yozib boriladi.
|