Menu

Daxil olun Qeydiyyat

Assembler x86 Linux (64 bit)

Sadə instruksiyalar

Sadə instruksiyalar

mov instruksiyası

Prosessorun məlumat üzərində yerinə yetirdiyi ən əsas işlərdən biri, məlumatı bir yerdən başqa yerə köçürməkdir. Bunun üçün proqramlarda mov instruksiyasından istifadə olunur.

Mov instruksiyası iki arqument qəbul edir, mov arq1, arq2. Arq1 köçürülən məlumatı, arq2 isə məlumatın köçürüldüyü yeri bildirir.

Arqument olaraq mov instruksiyasına hər hansı ədəd, registr və ya yaddaş ünvanı verə bilərik. Misal üçün, aşağıdakı instruksiya ilə prosessorun %ecx registrində olan məlumat %eax registrinə köçürülür:

movl %ecx, %eax

Mov instruksiyasının imkanları çox genişdir, belə ki, bu instruksiya vasitəsilə məlumatı registrlərdən fiziki yaddaşa, fiziki yaddaşdan registrlərə, bir registrdən digərinə və s. köçürmək olur. Bunlar ilə irəlidə kompüterin fiziki yaddaşının strukturunu öyrəndikdən sonra məşğul olacağıq. Hələlik isə, ancaq registrlərlə işləyək.

Başqa bir nümunəyə baxaq:

movl $5, %ebx

Bu instruksiya isə prosessorun %ebx registrinə 5 qiyməti yazır.

 

add instruksiyası

Add instruksiyası iki məlumatı cəmləmək üçün istifadə olunur.

add arq1, arq2

Bu zaman arq1 ilə arq2-nin cəmi hesablanır və nəticə arq2-nin üzərinə yazılır. Add instruksiyasına aid nümunələrə baxaq:


add %eax, %ebx 
add $56, %ecx 
add dey1, %edx

Birinci instruksiya %eax registrində olan məlumatı %ebx-dəki ilə cəmləyir və nəticəni %ebx-ə yazır, ikinci instruksiya %ecx registrinin qiymətin 56 vahid artırır, üçüncü instruksiya isə, fiziki yaddaşda yerləşən dey1 dəyişəninin qiymətini %edx-in qiməti ilə cəmləyir və nəticəni %edx-ə yerləşdirir.

Assembler dilində sadə cəmləmə proqramına baxaq:


#proq3.s

.text
.globl _start

_start:

movl $23, %ecx
movl $5, %exb

add %ecx, %ebx

movl $1, %eax
int $0x80

Proqramı icra edək:


[user@unix progs]$ 
[user@unix progs]$ as proq3.s -o proq3.o
[user@unix progs]$ ld proq3.o -o proq3
[user@unix progs]$ ./proq3
[user@unix progs]$ echo $?
28
[user@unix progs]$

Proqramın izahı:

Proqramın ilk sətirlərinin izahını bilirik. movl $23, %ecx instruksiyası %ecx-ə 23 qiymətini yazır. movl $5, %exb instruksiyası isə, %ebx-ə 5 qiymətini yazır. add %ecx%ebxinstruksiyası %ecx-dəki məlumatı %ebx-in üzərinə əlavə edib, nəticəni %ebx-də saxlayır.

 

sub instruksiyası

sub - çıxma instruksiyasıdır. Bu instruksiya add instruksiyası ilə eyni qəbildən olan instruksiyadır, sadəcə sub birinci arqumentin qiymətini ikincidən çıxıb nəticəni ikinciyə yerləşdirir, misal üçün:

subl $5, %eax instruksiyası eax registrinin qiymətini 5 vahid azaldar.

 

mull instruksiyası

mull - vurma instruksiyasıdır. O da add instruksiyasına analojidir, belə ki, iki arqument qəbul edir, mull arq1, arq2. Birinci ilə ikinci arqumentin hasilini hesablayıb ikinciyə yerləşdirir.

 

div instruksiyası

div - bölmə instruksiyasıdır. Sintaksisi divl arq şəklindədir. Bu zaman div instruksiyası %edx:%eax-də yerləşən qiyməti arq-a bölür. Arqument olaraq registr və ya nişan göstərilə bilər. Qismət %eax, qalıq isə %edx instruksiyasına yerləşdirilir. Misal üçün, 523 ədədini 8-ə bölək.


movl $0, %edx
movl $523, %eax
movl $8, %ecx
divl %ecx

Bölmə həyata keçirilmişdir, divl instruksiyasından sonra %eax-də qismət, %edx-də isə qalıq yerləşir.


Bizi dəstəkləyənlər