Jump to content
Forum Windows-az.com

Sadə Assembler proqramının işlənməsi


===

Recommended Posts

Assembler proqramı prosessorun arxitekturasını özündə əks etdirir. Başqa sözlə, assembler proqramı mikroprosessorun proqram modelinə daxil olan aparat vasitələri səviyyəsində işləyir. Proqramın alqoritminin işlənməsi, icrası, verilənlərin yaddaşda yerləşdirilməsi, məhdud sayda registrlərdən effektiv istifadə olunması, onun əməliyyat sistemi və başqa proqramlar ilə əlaqələndirilməsi və s. proqramçı tərəfindən icra olunur.

 

Kompüter ən aşağı səviyyədə ikilik informasiya ilə işlədiyindən, giriş-çıxış qurğuları ilə informasiya mübadiləsi ASCII simvollar kodunda aparılır. Odur ki, proqramçı mübadilə zamanı kod çevirmələrini də nəzərə almalıdır.

 

Aydındır ki, 0,1...9 diapazonundakı 16-lıq rəqəmlər ASCII kodunda uyğun olaraq 30h,...39h, A,...F diapazonundaki kiçik və böyük 16-lıq simvollar isə uyğun olaraq 41h,...46h və 61h,...66h kimi kodlaşdırılır.

 

Məsələn, onaltılıq 3 ədədinin ASCII kodu 33h ( 33h-ın ikilik təsviri- 00110011), 3 isə ikilik təsviri isə – 00000011 kimi göstərilir.

 

Odur ki, ASCII kodunu 16-lıq ədədə çevirmək üçün iki şərti nəzərə almaq lazımdır:

 

1. (ASCII kodu- 30h), ”yəni ikilik çıxma əməliyyatını aparmaq;

 

2. Baytın böyük tetradasını sıfırlaşdırmaq.

 

Deyilənləri nəzərə alaraq, iki rəqəmli 16-lıq ədədin simvola (ikilik təsvirdə) çevirilməsi məsələsinin proqramına baxaq:

 

;Prg_1.asm

;07Ch onaltılıq ədədini

; ikilik ekvivalentinə çevirən proqram

;Giriş: ilkin ikirəqəmli 16-lıq ədəd

; klaviaturadan daxil edilir

; Çıxış: çevirmənin nəticəsi

;dl registrində olmalıdır

;***********************

data segment para public “data” ; verilənlər seqmenti

message db “ ikirəqəmli 16-lıq ədədi daxil et $”

data ends

stk segment stack

db 256 dup (“?”“) ; stek seqmenti

stk ends

code segment para public “code” ; kodlar seqmentinin başlanğıcı

main proc ; main posedurunun başlanğıcı

assume cs:code, ds:data, ss:stk

mov ax,data ; verilənlər seqmentinin

; ünvanı AX-də

mov ds,ax ; AX registrinin məzmununu DS registrinə göndərmək

mov ah, 9

mov dx, offset message

int 21h

xor ax,ax

mov ah,1h

int 21h ; 21h nömrəli kəsilmənin çağrılması

mov dl,al ; (al) məzmununu dl göndərmək

sub dl,30h ; çıxma: (dl)=(dl)-30h

cmp dl, 9h ;(dl) məzmununu 9h müqayisə etmək

jle M1 ; əgər al<=9h onda M1 keçid

sub dl, 7h ; çıxma: (dl)=(dl)-7h

M1: ; M1 nişanının təyini

mov cl, 4h ; 4h-ın cl registrinə göndərmək

shl dl, cl ; (dl)məzmununu 4 mərtəbə

;sola sürüşdürülür

int 21h ; 21h nömrəli kəsilmənin

sub al, 30h ; çağrılması çıxma: (dl)=(dl)-30h

cmp al, 9h ; (al) məzmununu 9h müqayisə

jle M2 ; etmək əgər al<=9h onda M2 keçid

sub al, 7h ; çıxma: (al)=(al)-7h

M2: ;M2 nişanının təyini

add dl,al ; toplama: (dl)= (dl)+(al)

mov ah, 4c ; 4c00h –ın ax regstirinə göndərilməsi

int 21h ;21h nğmrəli kəsilmənin çağırılması

main endp ; main prosedurunun sonu

code ends ; sode seqmentinin sonu

end main ;girişi main nöqtəli proqramın sonu

 

 

 

Proqramı nəzərdən keçirsək, (burada biz əsasən Assembler proqramının strukturunu verməyi nəzərdə tuturuq) görərik ki, proqram Seqment və Ends direktivləri ilə qapanmış üç hissədən (9 və 11, 12 və 14, 15 və 44 sətirlər) ibarətdir. Əvvəldə qeyd olunduğu kimi mikroprosessor aparat vasitələri tərəfində qəbul olunan ünvandan asılı olmayan altı yaddaş sahəsi ilə işləyir:

 

Bunlar: kodlar, verilənlər, stek seqmenti və üç əlavə verilənlər seqmentləridir. Bu isə proqramın strukturunda yaddaşın təşkilinin xüsusiyyətlərini əks etdirdiyini göstərir.

 

9-11 sətrlər verilənlər, 12-14 sətrlər stek seqmentini təsvir edir. Bu 256 bayt uzunluğunda sadəcə yaddaş sahəsi və « ? » inisiallaşdırma işarəsindən ibarətdir.

 

15-44 sətrlərində kodlar seqmenti göstərilib. Bu seqmentdə (16)-(43) sətrlərdə bir tam prosedur təyin olunub.

 

17 sətrdəki assemblerin assume psevdooperatoru, seqmentlərə məxsus olan registrlərin adı (baza ünvanı üçün) haqqında məlumatı translyatora çatırır.

 

18-19 sətrlərdə verilənlər seqmentinin baza ünvanı ds registrinə yüklənir.

 

20-22 sətrlərdə “messaqe”- dəki məlumat ekrana sıxarılır. Bu “iki onaltılıq rəqəm daxil edin ” məlumatıdir.

 

23 sətr AX registrini təmizləyərək işə hazırlayır.

 

Bu əməliyyatdan sonra ax=0000 0000 0000 0000 olacaq.

 

24-25 sətrlər klaviaturadan simvolları daxil etmək üçün əməliyyat sisteminin vasitələrinə müraciət edir. Daxil edilən simvolları əməliyyat sistemi AL registrində yerləşdirir. Misal üçün, klaviaturadan “iki onaltılıq ədədi daxil edin “ məlumatına:

 

5c cavabını vermək olar. Yəni klaviaturadan 5c ədədini daxil etmək lazımdır.

 

25 sətrdəki əmr icra olunduqda, yəni ASCII kodunda 5 daxil edildikdən sonra AX registrinin məzmunu ax= 0000 0000 0011 0101 kimi olacaq.

 

26 sətrdəki əmr, növbəti elementi daxil etmək üçün AL registrinin məzmunu DL registrinə göndərir. Çünki, daxil edilən hər bir simvol əməliyyat sistemi tərəfindən mütləq AL registrinə yazılmalıdır.

 

26-cı sətr icra olunduqdan sonra DX registrinin məzmunu:

 

DX=0000 0000 0011 0101 olacaq.

 

27 sətrdəki əmr 5 simvoldan 30h çıxma yolu ilə onu ikilik ekvivalentinə çevirir. nəticədə DL registrində 5-ədədinin ikilik qiyməti alınıcaq:

 

DX=0000 0000 0000 0101

 

28-29 sətrləri, DL registrindəki ikilik qiymətin, korreksiya edilməsinə ehtiyac olduğunu araşdırır. Əgər bu qiymət 0,...9 diapazonundadırsa, onda korreksiya emək lazım deyil. Yəni, ikilik ekvivalentinə düzgün çevirilib.

 

Əgər DL registrindəki qiymət 9-dan böyükdürsə, onda çevriləcək ədəd A, B, C, D, E, F (burada kiçik hərflərin çevrilməsinə baxılmayıB) simvollardan birinə çevirilməlidir. Birinci halda 5 rəqəmi 0,...9 diapazonunda olduğundan 29-cu sətr idarəni M1 nişanlı sətrə göndərir. Hər bir 16-lıq rəqəm bir tetrada da yerləşdiyindən iki belə rəqəm (bizim hal üçün iki 16-lıq ədəd olduğundan) elə yerləşdirmək lazımdır ki, böyük mərtəbələrin qiyməti dəyişməsin. Bu məqsədlə 32-33 sətrləri DL registrinin qiymətini 4 mərtəbə sola sürüşdürür və beləliklə kiçik 16-lıq ədəd üçün kiçik tetrada boşaldılır.

 

34 sətri ikinci 16-lıq rəqəmi (onun ASCII kodu 63-dır) AL registrinə daxil edir.

 

AX= 0000 0000 0100 0011

 

35-37 sətrlər daxil edilən ikinci 16-lıq rəqəmin 0,...9 diapazonuna düşməsini yoxlayır. Bizim baxdığımız halda «c» 16-lıq simvolu bu diapazona düşmür. Onun üçün də onun düzgün ikilik ekvivalentini almaq məqsədinə əlavə korreksiya tələb olunur. Bunu 38-ci sətr yerinə yetirir. 35-ci sətrin icrasında sonra AL registirinin məzmunu:

 

AX= 0000 0000 0001 0011 olacaq.

 

AL registrinə 13h ədədi əvəzinə 0CH (16-lıq ədədinin yazılış qaydasına görə) yazılmalıdır. 0CH simvolu 0,...9 diapazonuna düşmədiyi üçün idarə 38-ci sətrə göndərilir. Burada çıxma əmrinin nəticəsində AL registrində, düzgün 0CH

 

(( AL ) =0CH ) qiyməti alınır.

 

Yəni, 0CH simvolu daxil edildikdə (AL) = 0100 0011, 38-ci sətrin icrasından sonra isə (AL)=(AL) - 37 = 0100 0011 - 0011 0111=0000 1100 alınar. Bu da 0CH simvolunun düzgün ikilik ekvivalentidir. Deyilənlərə uyğun olaraq AX məzmunu:

 

AX= 0000 0000 0000 1100

 

40-cı sətrdə isə DX registrində iki rəqəmli 16-lıq ədədin ikilik ekvivalentini almaq üçün aşağıdakı əməliyyat yerinə yetirilir:

 

DX= 0000 0000 0101 0000 ; 5 simvolunun

 

; sürüşdürülmüş ikilik qiyməti

 

+

 

AX= 0000 0000 0000 1100

 

------------------------------------

 

DX= 0000 0000 0101 1100

 

5 C

 

Beləliklə 05CH onaltılıq simvolunun düzgün ikilik ekvivalenti (DL)= 05CH alınar.

 

41-42 sətrlər proqramın sona çatdığını göstərir və idarəni əməliyyat sisteminə ötürür.

 

Assembler proqramının strukturu və onun tərtib edilməsinə aid daha geniş məlumat sonrakı materiallarda veriləcəkdir. Burada bizim misala aid olan qaydalarla tanış olmaq və assembler dilindəki proqramın, maşın dilinin simvolik təsviri olunduğunu göstərməkdir.

Link to comment
Share on other sites

Proqramlar telegramda

Sohbete katıl

Şimdi mesajını gönderebilir ve daha sonra kayıt olabilirsin. Bir hesabın varsa, hesabınla göndermek için şimdi oturum aç.

Misafir
Bu konuya yanıt ver...

×   Zengin metin olarak yapıştırıldı.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Önceki içeriğiniz geri yüklendi.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • loading...
×
×
  • Create New...