Kompyuter arxitekturasi”



Download 138,89 Kb.
bet11/15
Sana29.04.2022
Hajmi138,89 Kb.
#590599
1   ...   7   8   9   10   11   12   13   14   15
Bog'liq
Namuna

Ro'yxat 1.5. Oddiy assemblerning birinchi o'tishi
public static void pass_one() {
// Birinchi assembler o'tish sxemasi
boolean more_input=true; // birinchi o'tishni to'xtatuvchi bayroq
String line, symbol, literal, opcode; // buyruq maydonlari
int location_counter, length, value, type; // o'zgaruvchilar
final int END_STATEMENT = -2; // kirish yakuniy signallari
location_counter = 0; // birinchi buyruqni 0-joyga yig'ing
initialize_tables(); // umumiy ishga tushirish
while (more_input) { // END direktivasi yordamida more_input
// "noto'g'ri" qiymatini oladi
line = read_next_line(); // qatorni o'qing
length = 0; // Buyruqda # bayt
type = 0; // buyruq turi
if (line_is_not_comment(line)) {
symbol = check_for_symbol(line); // satrda yorliq bormi?
if (symbol != null) // agar shunday bo'lsa, ular yoziladi
// belgi va qiymat
enter_new_symbol(symbol, location_counter);
literal = check_for_literal(line); // satrda literal bormi?
if (literal != null) // agar ha bo'lsa, u holda
// jadvalda saqlangan
enter_new_literal(literal);
// Endi biz opcode turini aniqlaymiz. -1 yaroqsiz operatsiya kodini bildiradi
opcode = extract_opcode(line); // operatsiya kodining joylashuvini aniqlang
type =search_opcode_table(opcode); // formatni toping
// masalan, OP REG1,REG2
if (type < 0) // agar u opcode bo'lmasa,
// bu direktivmi?
type = search_pseudo_table(opcode);
switch(type) { // buyruq uzunligini aniqlang
case 1:length=get_length_of_type1(line); break;
case 2:length=get_length_of_type2(line); break;
// boshqa variantlar

}
}
write_temp_file(type, opcode, length, line); // uchun ma'lumot
// ikkinchi o'tish
location_counter = location_counter + length; // hisoblagichni yangilash
// buyruq manzillari
if (type == END_STATEMENT) { // kiritish tugallandimi?
more_input = false; // agar shunday bo'lsa, bajaring
// rasmiy harakatlar:
rewind_temp_for_pass_two(); // faylni orqaga qaytarish
sort_literal_table(); // literal jadvalni tartiblash
remove_redundant_literals(); // va undan dublikatlarni olib tashlaymiz
}
}
}
Ba'zi protseduralar nisbatan qisqa bo'ladi, masalan, check_for_symbol, agar mavjud bo'lsa, nomni, agar mavjud bo'lmasa, nolni belgilar qatori sifatida qaytaradi. Get_length_of_type1 va get_length_of_type2 kabi boshqa tartiblar tartiblarni oʻzlari chaqirish uchun yetarlicha uzun boʻlishi mumkin. Tabiiyki, amalda ikki xil emas, balki ko'proq bo'ladi - bu yig'ilgan tilga va ushbu tilda qancha turdagi buyruqlar taqdim etilishiga bog'liq.
Dasturlarning bunday tuzilishi dasturlash qulayligidan tashqari boshqa afzalliklarga ham ega. Agar dastur bir guruh odamlar tomonidan yozilsa, turli xil protseduralar bo'laklarga bo'linishi va dasturchilar o'rtasida taqsimlanishi mumkin. Kirishni olishning barcha tafsilotlari read_next_line dasturida yashiringan. Agar ushbu tafsilotlarni o'zgartirish kerak bo'lsa (masalan, operatsion tizimdagi o'zgarishlar tufayli), u holda faqat bitta bo'ysunuvchi protsedura ta'sir qiladi va pass_one protsedurasining o'ziga hech qanday o'zgartirish kiritilishi shart emas.
Birinchi o'tish paytida dasturni o'qiyotganda assembler opkodni (masalan, ADD) topish, uning turini (operandlar to'plamini) aniqlash va ko'rsatmalar uzunligini hisoblash uchun har bir qatorni tahlil qilishi kerak. Ushbu ma'lumot ikkinchi o'tishda kerak bo'ladi, shuning uchun satrni ikkinchi marta tahlil qilmaslik uchun uni yozib olish yaxshiroqdir. Biroq, kirish faylini qayta yozish uchun ko'proq kiritish-chiqarish kerak bo'ladi. Qatorlarni tahlil qilishga kamroq vaqt sarflash uchun kiritish-chiqarish operatsiyalari sonini ko'paytirish yaxshiroqmi yoki kiritish-chiqarish operatsiyalari sonini qisqartirish va tahlilga ko'proq vaqt sarflash yaxshiroqmi, protsessor va disk xotirasining tezligiga, samaradorlikka bog'liq. fayl tizimi va boshqa bir qator omillar. Bizning misolimizda operatsiya turi, kodi va uzunligi, shuningdek kirish satrining o'zi bilan vaqtinchalik fayl yozamiz. Aynan shu satr ikkinchi o'tish paytida o'qiladi va faylni ikkinchi marta o'qishga hojat qolmaydi.
END direktivasini o'qib bo'lgach, birinchi o'tish tugaydi. Ushbu nuqtada, agar kerak bo'lsa, ramziy nomlar jadvalini va so'zma-so'z jadvalini saqlashingiz mumkin. Literal jadvalda siz dublikatlarni saralashingiz va olib tashlashingiz mumkin.

Download 138,89 Kb.

Do'stlaringiz bilan baham:
1   ...   7   8   9   10   11   12   13   14   15




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