Fiziki yaddaşın strukturu
Fiziki Yaddaş hər birinin ölçüsü eyni olan və ardıcıl yerləşdirilmiş kiçik yaddaş hissələrindən – BAYTLARDAN ibarət bir sahədir.
1 bayt ən kiçik yaddaş hesab olunur və bu ölçüdə yaddaşda 0-dan 255-ə (255 də daxil olmaqla) kimi ədəd yerləşdirmək olar (natural ədədlər).
Onu da nəzərinizə çatdırım ki, fiziki yaddaşda ədəddən başqa heç nə yerləşdirə bilmərik. Yəni bizim musiqi, şəkil, mətn, proqram faylları və s. kimi adət etdiyimiz şeylər kompüterin yaddaşında ədədlər ardıcıllığından başqa bir şey deyillər.
Biz qeyd elədik ki, yaddaş ardıcıl düzülmüş və hər birinin ölçüsü eyni olan kiçik yaddaş hissələrindən – baytlardan ibarətdir. Kompüter yaddaşı ilə bağlı digər mühüm məsələ ÜNVANməsələsidir. Fiziki yaddaşı təşkil edən hər bir baytın öz ünvanı olur. Fiziki yaddaşı təşkil edən baytlar ardıcıl düzülür və 0-dan başlayaraq nömrələnir.
Yəni yaddaşın ilk baytının nömrəsi 0, növbəti baytın nömrəsi 1, və s.
Tərif: Fiziki yaddaşda verilmiş baytın sıra nömrəsi onun ÜNVANI adlanır.
Yeri gəlmişkən qeyd edim ki, Fiziki yaddaş bizim bildiyimiz RAM qurğusudur.
Tapşırıq:
1. Həcmi 512MB, 1GB, 2GB olan fiziki yaddaşın sonuncu baytının ünvanını hesablayın.
2. Yuxarıdakı məsələdə aldığınız ünvanları 16-lıq (hex) say sistemi ilə ifadə edin.
3. Sonuncu baytının ünvanı 0xffffffff olan fiziki yaddaşın həcmini hesablayın.
Fiziki yaddaşdan əlavə, kompüterin daimi yaddaş qurğuları da mövcuddur. Bunlara Sərt disk, CD/DVD, USB disk və s. misal gətirmək olar. Daimi yaddaş məlumatın uzun müddət saxlanması üçün istifadə olunur. Proqramı icra edərkən, əməliyyatlar sistemi proqramın obyekt faylını daimi yaddaşdan fiziki yaddaşa köçürür. Fiziki yaddaşda isə, uzun müddət saxlanılan məlumatlar yox, icra olunan proqramlar yüklənir. Fiziki yaddaş məhz bu məqsədlə hazırlanıb və onunla CPU arasında məlumat mübadiləsi çox sürətlidir. Daimi yaddaşa isə, CPU birbaşa müraciət etmir. Bundan sonra yaddaş dedikdə, yalnız fiziki yaddaş qurğusu başa düşülür.
Prosessorun məlumata müraciət etmə üsulları
Prosessorun əldə etdiyi məlumat birbaşa instruksiyanın daxilində, fiziki yaddaşda və ya registrdə ola bilər. Prosessor məlumata 2 üsulla müraciət edə bilər: birbaşa və fiziki yaddaşdan. Birbaşa müraciət zamanı məlumat ya instruksiyanın daxilində, ya da registrdə yerləşir.
Müasir prosessorlar fiziki yaddaşda yerləşmiş məlumata mov – köçürmə instruksiyasından istifadə etməklə müxtəlif yollarla müraciət edə bilər. Biz aşağıda bu qaydalar və onların assembler dilində istifadəsi ilə tanış olacağıq. Məlumatın köçürülməsi üçün prosessorun istifadə elədiyi işci instruksiyası mov instruksiyasıdır. mov instruksiyasının sintaksisi ilə biz artıq tanışıq:
mov arq1, arq2
Bu zaman arq1 məlumatı arq2-yə köçürülür. İndi cavab axtardığımız sual "mov instruksiyasına arq1 və arq2 olaraq hansı arqumentləri verə bilərik" sualıdır. Burada bir neçə müxtəlif məqam var ki, ilk dəfədən başa düşməyə çətinlik yaradır. Məqsəd məlumatı köçürməkdir. arq1 köçürülən məlumatı, arq2 isə bu məlumatın köçürüldüyü yeri bildirir. mov instruksiyası 4 müxtəlif yolla məlumatı köçürə bilər: konkret verilən məlumat, konkret fiziki ünvanı verilən məlumat, registrdə yerəşən məlumat, fiziki ünvanı registrdə yerləşən məlumat.
Mənsəb isə, yəni məlumatın köçürüldüyü yer 2-dir: fiziki yaddaş və ya CPU-nun registri. Birinci arqument olaraq, hər hansı ədəd, nişan və ya registr verilə bilər. Misal üçün, aşağıdakı kimi:
movl 45, %eax
movl %ecx, %edx
movl dey, %ebx
movl 67, melumat
Assembler dilində nişanlar proqramda hər hansı məlumat və ya kod ünvanını bildirmək üçün istifadə olunur. Bundan əlavə, arqumentlər bəzən mötərizə arasında da göstərilə bilər. Məsələn:
movl (%ecx), %edx
movl (67), melumat
Əlavə olaraq, arqumentlərin əvvəlinə $ işarəsi də artıtıla bilər. Misal üçün:
movl $45, %eax
movl $dey, %ebx
Bütün bunların hamısının əlbəttə öz mənası var, gəlin, onlarla tanış olaq.
1. Arqument olaraq ədəd verilir.
Əgər arqument olaraq ədəd verilirsə, bu, Fiziki ünvan bildirir. Misal üçün, movl 45, %ebx instruksiyasında birinci arqument olaraq 45 ədədi göstərilmişdir. Bu, Fiziki yaddaşın 45 nömrəli baytını bildirir. Bu instruksiya icra olunanda yaddaşın 45-ci baytından etibarən növbəti 4 bayt (45-48-ci baytlar) %ebx registrinə köçürülür.
2. Arqument olaraq ədəd verilir və qarşısında $ işarəsi qoyulur.
Əgər arqumentin qarşısında $ işarəsi yerləşirsə, bu zaman artıq fiziki ünvan yox, sadəcə ədəd başa düşülməlidir. Misal üçün, movl $45, %eax instruksiyası %eax registrinə 45 ədədini yerləşdirəcək. Bunun Fiziki yaddaşın 45-ci baytında yerləşən məlumatla heç bir əlaqəsi yoxdur.
3. Arqument olaraq nişan göstərilir.
Nişanlar qeyd elədik ki, hər hansı kod və ya məlumatın fiziki yaddaşda yerləşdiyi yeri bildirir. Bu barədə ətraflı dəyişənləri keçdikdə tanış olacağıq. Hələlik isə, sadəcə nəzərə alaq ki, nişanlar hər hansı məlumat və ya kod hissəsinin fiziki ünvanının adla əvəz olunmuş formasıdır. Əgər mov instruksiyasına arqument olaraq nişan verilibsə, bu zaman həmin nişanın fiziki yaddaşda istinad elədiyi məlumat nəzərdə tutulur. Misal üçün, movl dey, %ecx instruksiyası dey ünvanında yerləşən 4 bayt məlumatı %ecx registrinə köçürür.
4. Arqument olaraq nişan verilir və qarşısına $ işarəsi qoyulur.
Əgər arqument olaraq nişan verilirsə və qarşısına $ qoyulursa, bu zaman həmin nişanın bildirdiyi fiziki ünvan başa düşülür. Misal üçün, movl $dey, %edx instruksiyası dey nişanının istinad elədiyi fiziki ünvanı (baytın nömrəsi) %edx registrinə yazır.
5. Arqument olaraq registr verilir.
Əgər arqument olaraq registr verilirsə, bu zaman həmin registrdə yerləşmiş məlumat nəzərdə tutulur. Misal üçün, movl %edx, dey instruksiyası %edx registrində olan məlumatı dey dəyişəninə yazır.
6. Arqument olaraq registr verilir və arqument mötərizə işarəsi içinə yerləşdirilir.
Əgər arqument mötərizə işarəsi içindədirsə, bu zaman fiziki ünvan başa düşülür. Misal üçün, movl (%edx), %eax instruksiyası artıq %edx registrində olan məlumat deyil, fiziki ünvanı %edx-dəki ədədə bərabər olan məlumatı %eax registrinə köçürür. Bu zaman %edx-də olan ədəd köçürüləcək məlumatın fiziki ünvanını bildirir.
7. Arqument olaraq ədəd, nişan, registr və mötərizədən istifadə olunur.
Misal üçün, movl dey(%ecx, %edx, 4), %ebx. Bu zaman dey(%ecx, %edx, 4) ünvanında yerləşən məlumat %ebx registrinə köçürülür. Bu halda mənbə ünvanın hesablanması üçün aşağıdakı qaydadan istifadə edirlər:
Yekun ünvanın hesablanması qaydası
Başlanğıc_Ünvan (%sürüşmə_registri, %index_reiqstri, əmsal) şəklində verilmiş ünvanı yekun ünvana çevirmək üçün aşağıdakı düsturdan istifadə olunur:
Yekun_ünvan = Başlanğıc_ünvan + %sürüşmə_registri + %index_registri * əmsal;
Burada Başlanğıc_ünvan və əmsal olaraq nişan və ya ədəd, %sürüşmə_registri və %index_registri olaraq isə, registrlərdən istifadə olunur.
Misal üçün:
movl dey(%eax, %ecx, 4), %edx
Bu zaman əvvəl yuxarıdakı düsturla müraciət olunan yaddaş ünvanı hesablanır:
dey + %eax + %ecx*4;
Sonra fiziki yaddaşda bu ünvanda yerləşən məlumat %edx-ə köçürülür. Bu sintaksisdə bütün parametrlərin olması vacib deyil. Əgər hər hansı parametr verilməyibsə, onun qiyməti 0 qəbul olunur.
Misal üçün: dey(%eax) nümunəsində %index və əmsal hədlərinin, dey(,%ecx, 5) nümunəsində %sürüşmə həddinin, (%eax) nümunəsində başlanğıc_ünvan, %index və əmsalhədlərinin qiymətləri 0-a bərabər qəbul olunur.