Assembler proqramlaşdırma dili

Seqmentləşmənin sadələşdirilmiş modeli

Seqmentləşmənin sadələşdirilmiş modeli

Proqramlarda seqmentlərin tərtibatını sadələşdirmək üçün MASM və TASM translyatorlarında seqment-ləşmənin sadələşdirilmiş direktivlərindən istifadə edilir.

Bu zaman seqmentləri kombinasiya edən və yerləşməni birbaşa idarə edən imkanların olması problemi ortalığa çıxır. Buna görə də seqmentləşmənin sadələşdirilmiş direktivləri ilə bərabər yaddaşın Model direktivindən istifadə edilməyə başlandı. Bu direktiv müəyyən mənada seqmentlərin yerləşməsini idarə edir və Assume direktivinin müəyyən funksiyalarını yerinə yetirir. Seqmentləşmənin sadələşdirilmiş direktivlərindən istifadə edərkən, bu direktiv uyğun adlarla verilmiş seqmentlər arasında əlaqə yaradır.

Model direktivinin formatı aşağıdakı kimidir:

MODEL [modelin_modifikatoru] model [, dil]

[, əlaqənin_modifikatoru]

Göründüyü kimi Model direktivinin məcburi parametri yaddaş modelidir. Bu parametr proqram modulu üçün yaddaşın seqmentləşmə modelini təyin edir. Aşağıdakı cədvəldə yaddaş modeli üçün Model direktivinin operandları verilmişdir. Bu operandlar proqramın seqmentlər yığımını, kodlar və verilənlər seqmentlərinin ölçüsü və seqmentlərin seqment registrləri ilə əlaqəsini təyin edir.


 

Model direktivinin modelin_modifikatoru parametri seçilmiş yaddaş modelinin istifadəsinin bəzi xüsu­siy­yətlərini dəqiqləşdirməyə imkan verir:

Məcburi olmayan DİL parametri C, Pascal, Basic, Fortran, Syscall və Stdcall qiymətlərini ala bilər. Əgər bu parametr göstərilibsə bu o deməkdir ki, proseduranı uyğun yüksək dillərin proqramlarında da çağırmaq olar. Yəni, C dili parametr kimi göstərilibsə Assembler proqramda PABLİC kimi elan edilən bütün adlar C dilinin yazılışına uyğun olaraq alt xətt (_) simvolu ilə başlayan adlara çevriləcək və belə adlardan proqramda istifadə edilə bilər. Məsələn:

a) MODEL LARGE, PASCAL

b) MODEL USE16 SMALL

Məcburi olmayan əlaqənin_modifikatoru parametri NEARSTACK (susmaya görə) və ya FARSTACK qiymətini ala bilər. İkinci parametr təyin edilərsə stek seqmenti verilənlər seqmenti ilə bir qrupda birləşməyəcək.

Proqram modulları aşağıdakı cədvəldə verilmiş seqmentlərin təsvirinin sadələşdirilmiş direktivlərindən biri ilə təyin edilən seqment tipinə malik ola bilər.

 

Model direktivindən istifadə edərkən translyator proqramın emalı zamanı aşağıdakı identifikatorlara müraciət etməklə verilən yaddaş modeli haqqında informasiya ala bilər.

Seqmentlərin sadələşdirilmiş modelindən istifadə olunmasına aid məsələnın proqramına baxaq:

 

MASM                       ; TASM iş rejimi: ideal və ya tasm
MODEL SMALL            ; yaddaş modeli
. STACK  100h    ; stek seqmenti (və ya növbəti iki sətr 
                               ; eyni mənalıdır)
                               ; STACK
                               ; DB  256 DUP (?)
.DATA                       ;verilənlər seqmenti
message    DB  “ Bu proqramı TD.exe sazlayıcısı ilə yoxla”,’$’
Perem_1   DB 0FFh
Perem_2   DW 3A7Fh
Perem_3   DD  0F54D567Ah
Mas        DB   10 DUP (“ “)
Adr        DW  Perem_3
Adr_full    DD  Perem_3
Fin      DB   “proqramın verilənlər seqmentinin sonu $”
.CODE                              ;kodlar seqmenti
 START:
     MOV      AX, @DATA ; verilənlər seqmentinin ünvanını AX yükləmək 
     MOV      DS, AX            ; AX^DS
     MOV      AH, 09h            
     MOV      DX, OFFSET message
     INT       21h 
     MOV       AX,4C00h          ; 4C00h^AX
     INT         21h       ; 21h nömrəli kəsilmənin çağrılması
     END START