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.