Assembler üzrə illüstrasiyalı dərslik. Montaj Arifmetik Təlimatları

Komanda ADC(Daşıma ilə əlavə et) qrupuna aiddir tam ədəd əmrləri(və ya ikili)hesab (Binar Arifmetik Təlimatlar) və iki işarəli və ya işarəsiz operandın tam əlavəsini yerinə yetirir ( DESTSRC) Və bayraq daşımaq EFLAGS.CF. Birinci operand ( təyinat operandı, DEST) registrdə və ya yaddaşda dəyişən ola bilər ( , r16, r32, r/m8, r/m16, r/m32). İkinci operand ( mənbə operand, SRC) - bilavasitə məna ( imm8, imm16, imm32), registrdə və ya yaddaşda dəyişən. Bu halda hər iki operand eyni vaxtda yaddaşda dəyişən ola bilməz.

Əmrlə əlavənin nəticəsi ADC birinci operandın yerinə qoyulur ( DEST). EFLAGS reyestrindəki bayraqlar nəticəyə uyğun olaraq təyin edilir.

Birbaşa dəyər əlavə edərkən imm8 və ya imm16 iki baytlıq və ya dörd baytlıq operand ilə dərhal dəyər əvvəlcə birinci operandın ölçüsünə işarə ilə genişləndirilir və yalnız bundan sonra əlavə edilir.

Komanda ADC adətən çoxbayt və ya çox sözdə istifadə olunur ( çox sözlü) əlavə əməliyyatları. Bu halda, o, çoxbaytlı (çox sözlü) operandların aşağı dərəcəli bitlərinin cəmini qaytaran ADD təlimatına əməl edir və yüksək səviyyəli bitləri əlavə edərkən daşıma funksiyasını nəzərə almağa imkan verir. Misal üçün:

mov edx, 0 ; EDX = 0
mov eax, 0FFFFFFFFh ; İlk 32 bitlik əlavə EAX-da yerləşdirilir
eax əlavə edin, 0FFFFFFFFh ; ikinci 32 bit əlavə - 0x FFFFFFFFh, biz iki 32 bitlik operand əlavə edirik
adc edx, 0 ; EDX = EDX + CF, ötürülməni nəzərə alın
; EDX:EAX = 0000000lh:FFFFFFFEh - nəticədə 64 bitlik nəticə

Komanda ADC kimi tam operandların manipulyasiyasına imkan verir imzasız format, və içində imzalanmış format. İşarə ilə məlumat əlavə edərkən bayrağı imzalamaq EFLAGS.SF əldə edilən nəticənin işarəsini əks etdirəcək. Daşma bayrağı EFLAGS.OF 1-ə təyin ediləcək, əgər iki və ya iki tamamlamada təmsil olunan işarəli tam qiymətləri əlavə edərkən, daşqın baş verərsə (işarə bitindən əvvəlki bitin uyğun gəldiyi ən əhəmiyyətli bitdən keçir), yəni əldə edilən nəticə operandın mövcud ölçüsünü aşır - təyinatlar ( DEST). Əsasən, bu, EFLAGS.CF bayrağının əlavə edərkən daşmağı (daşıma) əks etdirməsinə bənzəyir. imzasız operandlar. Məsələn, əks kodda təmsil olunan iki 32 bitlik dəyər əlavə edərkən, bu belə görünə bilər:

mov eax, operand1 ; EAX = operand1, ilk 32-bit əlavə EAX-da yerləşdirilir
eax, operand2 əlavə edin; tərs kodda iki 32 bitlik operand əlavə edirik
daxil; daşması halında müdaxilə işləyicisinə keçid

adc eax, 0 ; EAX = EAX + CF, daşıma nəzərə alın (əks kodda əlavə etmək lazımdır)
; EAX = operand1 + operand2 - əks kodda əlavənin nəticəsi
jns m1; nəticə müsbət olarsa keçid
xor eax, 7FFFFFFFh ; EAX-da mənfi dəyərin düz koda çevrilməsi
m1: ; EAX - birbaşa kodda əlavənin nəticəsi

Köməkçi bayraq(və ya əlavə)transfer EFLAGS.AF BCD formatında verilənlərin manipulyasiyasına kömək edir ( paketlənmiş BCD formatı). Əlavə zamanı nəticənin aşağı baytının aşağı tetradından yüksək tetrada qədər daşıma baş verərsə təyin edilir. Komandadan dərhal sonra DAA əmrindən istifadə edin ADC, sözdə istehsal etmək mümkündür ondalık düzəliş toplamanın nəticəsini və eyni məbləği əldə edin paketlənmiş BCD formatı, orijinal şərtlər kimi.

Komanda ADC təyinat operandıyla ( DEST), yaddaş dəyişəni olan LOCK kilidi prefiksi ilə birlikdə istifadə edilə bilər ki, bu da əmrin atomik icrasını təmin edəcək.

Əlavə əmrləri - ADD, ADC

ADD (əlavə et) və ADC (daşıyıcı ilə əlavə et) təlimatları həm 8, həm də 16 bitlik operandları əlavə edə bilər.

ADD təlimatı mənbə operandının və təyinat operandının məzmununu əlavə edir və nəticəni təyinat operandına yerləşdirir.

Komanda formatı: Qəbuledici, mənbə əlavə edin

Simvolik qeydlərdə onun hərəkətlərini aşağıdakı kimi təsvir etmək olar: sink:= sink + mənbə (lavabonun içindəki və mənbənin cəmi lavaboya yazılır).

ADC əmri ADD əmri ilə eyni şeyi edir, lakin iki deyil, üç termin əlavə edir: təyinat, mənbə və daşıma bayrağı.

Komanda formatı: ADC qəbuledicisi, mənbə + CF

Simvolik qeyddə onun hərəkətləri aşağıdakı kimi təsvir edilə bilər:

sink:= sink + mənbə + daşıma bayrağının məzmunu.

İkilik ədədləri əlavə edərkən daşıma, ondalık ədədləri sütuna əlavə edərkən daşımağa bənzəyir. Kompüter ikili ədədləri əlavə etdikdə və məbləğ təyinat operandına uyğun gəlmədikdə, daşıma yaranır. Bildiyiniz kimi, 8 bitlik registr 0-dan 255-ə qədər diapazonda işarəsiz dəyərləri saxlaya bilər. Məsələn, 250 və 10 rəqəmlərinin ikili əlavəsini yerinə yetirsək, aşağıdakı nəticəni əldə edəcəyik:

1111 1010; 250 ədədinin ikili təsviri.

0000 1010 ; 10 ədədinin ikili təsviri.

1 0000 0100; 260-a bərabər olan cəminin ikili təsviri.

Nəticə düzgündür, lakin 9 ikili bit tutur. Əgər 8 bitlik registrlərdən istifadə olunubsa, onda aşağı 8 bit təyinat registrinə, doqquzuncu bit isə daşıma bayrağı CF-ə daxil ediləcək.

İndi başa düşürük ki, 8086 mikroprosessorunda niyə iki fərqli əlavə təlimatı var. Onlardan biri (ADD) bayt və ya sözlərlə təmsil olunan dəyərləri, həmçinin yüksək dəqiqlikli dəyərlərin aşağı hissələrini əlavə edə bilər. Başqa bir təlimat (ADC) yüksək dəqiqlikli dəyərlər əlavə etmək üçün istifadə olunur.

Əlavə ediləcək operandlar yaddaşda, registrdə və ya dərhal dəyərə malik ola bilər. Misal üçün:

AX,MEM_WORD ƏLAVƏ EDİN; yaddaş hüceyrəsinin məzmununu reyestrə əlavə etmək,

MEM_WORD ƏLAVƏ,AX; və ya əksinə, reyestrin məzmununu yaddaş xanasına əlavə edin.

ƏLAVƏ AL, 10; reyestrin məzmununa sabit əlavə edin.

MEM_BYTE,8H ƏLAVƏ EDİN; sabiti və yaddaş hüceyrəsinin məzmununu əlavə edin.

Ən çox mümkün birləşmələrə icazə verilir, lakin qadağandır iki yaddaş xanasının məzmununu əlavə edin və ya qəbuledici kimi birbaşa dəyərdən (nömrə) istifadə edin.

ADD və ADC əmrləri aşağıdakı altı bayrağa təsir edə bilər:

bayraq daşımaqƏgər əlavənin nəticəsi təyinat operandına uyğun gəlmirsə, CF 1-dir, əks halda 0-dır;

paritet bayrağı PF 1-dir, əgər nəticədə 1 dəyəri olan cüt sayda bit varsa, əks halda 0-dır;

Onluq ədədlərin əlavə edilməsinin nəticəsi düzəliş tələb edirsə, AF 1-ə bərabərdir;

sıfır bayraq Nəticə 0 olarsa ZF 1-dir;

bayrağı imzalamaq Nəticə mənfi olarsa SF 1-dir (ən əhəmiyyətli bit 1-dir), əks halda 0-dır;

daşqın bayraq Eyni işarənin iki ədədinin cəmi əks kodda qəbuledicinin məqbul dəyərləri diapazonunu keçərsə və qəbuledicinin özü işarəni dəyişirsə, OF 1-ə bərabərdir. Əks halda, OF bayrağı 0-dır.

Qəbuledici dəyərini bir artırmaq əmri - INC

Komanda INC(artım) registr və ya yaddaş xanasının məzmununa 1 əlavə edir, lakin ADD təlimatından fərqli olaraq, daşıma bayrağı CF-ə təsir etmir. Komanda formatı: INC qəbuledicisi.

INC təlimatı təlimat dövrələrində sayğacları artırmaq üçün faydalıdır. Ardıcıl yaddaş hüceyrələrinə daxil olduqda indeks registrinin dəyərini artırmaq üçün də istifadə edilə bilər. Operand işarəsiz nömrə kimi şərh olunur.

Misal üçün:

Haqqımızda Şirkətin Adı: INC CX; 16 bit dəyərini artırın

Haqqımızda Şirkətin Adı: INC AL; və ya vahid üçün 8 bitlik registr.

INC MEM_BYTE; bayt dəyərini artırın

INC MEM_WORD; və ya vahid başına yaddaş sözləri.

Dərhal dəyərin operand kimi istifadə edilməsinə icazə verilmir.

Çıxarma əmrləri - SUB və SBB borclanması ilə çıxma

Komandalar SUB(çıxmaq - çıxarmaq) və SBB(borc ilə çıxarın) müvafiq olaraq ADD və ADC əlavə əmrlərinə bənzəyir, yalnız çıxma zamanı CF daşıma bayrağı kreditin əlaməti kimi çıxış edir. Komanda formatı: SUB qəbuledici, mənbə;

SUB əmri mənbə operandını təyinat operandından çıxarır və nəticəni simvolik qeydlə təyinat yerinə yerləşdirir:

sink:= sink – mənbə.

Komanda SBB eyni şeyi edir, lakin əlavə olaraq qəbuledicidən CF daşıma bayrağının dəyərini çıxarır:

SUB qəbuledicisi, mənbə – CF;

Təyinat:= sink - mənbə - daşıma bayrağının məzmunu.

Əlavə olaraq, SUB və SBB təlimatları iki ayrı funksiyanı yerinə yetirir. Birinci komanda bayt və ya söz ölçülü ədədləri, eləcə də yüksək dəqiqlikli ədədlərin aşağı dərəcəli bitlərini çıxarır (ədədin aşağı sıra hissəsi AX registrində, yüksək səviyyəli hissəsi isə registrdə yerləşir). DX reyestri). İkinci əmr yüksək dəqiqlikli ədədlərin ən əhəmiyyətli bitlərini çıxarır. Məsələn, SUB AX,CX əmri; CX registrinin məzmununu AX registrinin məzmunundan çıxarır və nəticəni AX registrinə qaytarır.

Operand ölçüləri 16 bitdən çox olarsa, aşağıdakı əmrlər ardıcıllığından istifadə edilməlidir:

SUB AX,CX; Aşağı 16 biti çıxarın;

SBB BX, DX; və sonra ən əhəmiyyətli 16 bit.

Burada AX və BX registrlərində yerləşdirilmiş 32 bitlik nömrədən CX və DX registrlərində yerləşən 32 bitlik nömrəni çıxarırıq. DX registrinin məzmununu BX registrinin məzmunundan çıxararkən, SBB təlimatı birinci çıxma həyata keçirərkən borc götürmə imkanını nəzərə alır.

SUB AX, MEM; Yaddaş xanasının məzmununu registrdən çıxarın.

SUB MEM ,AX; Yaddaş hüceyrəsindən reyestri çıxarın.

SUB AL,1O; Reyestrdən sabiti çıxarın.

SUB MEM_BYTE,OFh; Yaddaş hüceyrəsindən sabiti çıxarın.

Birbaşa çıxarmaq mümkün deyil bir yaddaş hüceyrəsinin məzmununu digərindən götürün və ya dərhal dəyəri təyinat yeri kimi istifadə edin.

SUB və SBB əmrləri altı bayrağa aşağıdakı kimi təsir göstərə bilər:

· yüklemek bayraq daşımaqƏgər kredit tələb olunursa, CF 1-dir, əks halda 0-dır;

· yüklemek paritet bayrağıÇıxarmanın nəticəsi 1 qiyməti olan cüt sayda bitlərə malikdirsə, PF 1-dir, əks halda 0-dır;

· yüklemek köməkçi daşıma bayrağı Ondalık çıxmanın nəticəsi düzəliş tələb edirsə, AF 1-dir, əks halda 0-dır;

· yüklemek sıfır bayraq ZF-dən 1-ə, əgər nəticə 0-dırsa, əks halda 0-dır;

· yüklemek bayrağı imzalamaq Nəticə mənfi olarsa SF 1-dir (ən əhəmiyyətli bit 1-dir), əks halda bayraq 0-dır;

· yüklemek daşqın bayraqÇıxarma nəticəsi əks koddakı qəbuledici dəyərlərinin diapazonunu aşarsa və qəbuledicinin özü işarəni dəyişirsə OF 1-dir.

SF və OF bayraqları yalnız imzalanmış ədədləri çıxdıqda, AF bayrağı isə yalnız onluq ədədləri çıxdıqda məna kəsb edir.

Təyinat Məzmununu Azalt Komandası - DEC

Komanda DEC qəbuledicisi(azaltma) registr və ya yaddaş yerinin məzmunundan 1-i çıxarır, lakin (SUB təlimatından fərqli olaraq) CF daşıma bayrağına təsir etmir.

DEC təlimatı tez-tez döngələrdə sayğac dəyərini sıfıra və ya mənfi olana qədər azaltmaq üçün istifadə olunur. Ardıcıl yaddaş yerlərinə daxil olduqda, indeks registrinin və ya göstəricinin dəyərini azaltmaq üçün də istifadə edilə bilər. Misal üçün:

DEC CX; 16 bit dəyərini azaldın,

DEC AL; və ya 8 bitlik registr.

DEC MEM_BYTE; Bayt dəyərini azaldın,

DEC MEM_WORD; və ya söz yaddaş hüceyrəsi.

Bölmə təlimatları - DIV, IDIV

Komanda DIV(bölmək - bölmək) ədədlərin işarəsiz bölünməsini və əmrini yerinə yetirir IDIV(tam ədədlərə bölmək - tam ədədləri bölmək) ədədlərin işarəli bölünməsini həyata keçirir. Bu əmrlərin formatı var:

DIV mənbəyi; Harada mənbə- bayt və ya söz ölçüsünün bölücü,

IDIV mənbəyi;ümumi təyinatlı registrdə və ya yaddaş yerində yerləşir.

Aşağıdakıları qeyd edin:

1. Dividend bölücüyə nisbətən ikiqat ölçüdə olmalıdır.

2. Dividend həmişə AX registrində (8 bitlik ədədə bölündükdə) və ya DX və AX registrlərində (16 bitlik ədədə bölündükdə) olmalıdır.

3. Komandanın nəticələri aşağıdakı kimi qaytarılır:

· əgər mənbə operand baytdırsa, onda bölmə AL registrinə, qalanı isə AN registrinə qaytarılır;

· Əgər mənbə operand sözdürsə, onda hissə AX registrinə, qalanı isə DX registrinə qaytarılır.

Hər iki təlimat bayraqların vəziyyətini qeyri-müəyyən edir, lakin əgər bölmə təyinat registrinə (AL və ya AX) uyğun gəlmirsə, o zaman mikroprosessor 0 tipli kəsmə yaradır (0-a bölmə).

4. Bölmə nəticəsinin daşması aşağıdakı şərtlərdə baş verir:

· bölən 0-dır;

· baytları işarəsiz bölərkən dividend bölücünün ən azı 256 mislini təşkil edir;

· sözləri işarəsiz bölərkən dividend bölücünün ən azı 65536 mislini təşkil edir;

· baytları işarə ilə bölərkən bölmə -128 ilə +127 diapazonundan kənarda qalır;

· sözləri işarə ilə böldükdə bölgü diapazondan kənarda qalır

32768-dən 32767-yə qədər.

Bölmə əməliyyatlarının bəzi tipik nümunələri bunlardır:

DIV BX; DX:AX-ı BX-ə bölün, imzasız.

DIV MEM_BYTE; AX-ı imzasız yaddaş baytına bölün.

IDIV DL; İşarə ilə AX-ı DL-ə bölün.

IDIV MEM WORD; DX:AX-ı imzalanmış yaddaş sözünə bölün.

DIV və IDIV təlimatları birbaşa qiymətə bölünmür, çünki prosessor bölücünün məlumat tipini təyin edə bilmir.

Vurma təlimatları - MUL, IMUL

Komanda MUL(çoxalmaq) işarəsiz ədədləri çoxaldır, a IMUL(tam ədədi çoxalt) işarəli tam ədədləri çoxaldır. Hər iki təlimatın çarpanı və çarpanı eyni məlumat növü olmalıdır, yəni bayt, söz, qoşa söz və s.

Bu əmrlər aşağıdakı formata malikdir:

MUL mənbəyi; Harada mənbə- ümumi təyinatlı reyestr,

IMUL mənbəyi; və ya bayt və ya söz ölçülü yaddaş hüceyrəsi.

Birinci operand (çoxalma) kimi MUL və IMUL təlimatları AL registrinin (bayt üzərində əməliyyatlar üçün) və ya AX registrinin (sözlər üzərində əməliyyatlar üçün) məzmunundan istifadə edir. Məhsul ikiqat ölçülüdür və aşağıdakı kimi qaytarılır:

· vurma bayt-16 bitlik məhsulu AN (yüksək bayt) və AL (aşağı bayt) registrlərinə qaytarır;

· vurma sözlər-32 bitlik məhsulu DX (yüksək söz) və AX (aşağı söz) registrlərinə qaytarır. Beləliklə, məhsulun ölçüsü n- bit amilləri bərabərdir 2n.

Taşıma ilə ADC Tam əlavə

Komanda adc birinci və ikinci operandların əlavə edilməsini yerinə yetirir, nəticəyə daşıma bayrağının CF dəyərini əlavə edir. Birinci operandın (təyinat yerinin) orijinal dəyəri itirilir, əlavənin nəticəsi ilə əvəz olunur. İkinci operand dəyişməzdir. Komandanın ilk operandı kimi adc

Operandlar bayt və ya söz ola bilər və işarələnmiş və ya işarəsiz nömrələri təmsil edə bilər. Komanda adc(komanda ilə birlikdə əlavə edin) adətən 32 bitlik nömrələri əlavə etmək üçün istifadə olunur. Komanda OF, SF, ZF, AF, PF və CF bayraqlarına təsir göstərir.

Misal 1:

Mov AX,1125h adc AX,2C25h; AX=3D4Bh, əgər CF = 1;AX=3D4Ah, əgər CF = 0 olarsa

Misal 2:

; Məlumat sahələrində: numlow dw 0FFFFh; 2-ci dövrün aşağı hissəsi numhigh dw 000Sh; 2-ci hissənin ən yüksək hissəsi;Nömrə 0005FFFFh=393215;Proqram seqmentində: mov AX,000Ş; 1-ci müddətli mov BX,0002h-nin aşağı dərəcəli hissəsi; 1-ci hissənin ən yüksək hissəsi;Nömrə 00020005h=131077 əlavə edin AX,numlow; Kiçik hissələrin əlavə edilməsi. AX=4, CF=1 əlavə BX, sayı yüksək; Daşıma ilə daha yüksək hissələrin əlavə edilməsi. BX:AX=0008:0004h. ;Nömrə 00080004h=524292

32 bitlik operandların və 32 bitlik prosessorların əlavə ünvanlama rejimlərinin istifadəsi məqbuldur. Komanda adc 32 bitlik operandlarla, 64 bitlik tam ədədlər əlavə etmək üçün istifadə edilə bilər.

Misal:

; Məlumat sahələrində mem321 dd 0FFFFFFFFh; 1-ci kursun aşağı dərəcəli hissəsi mem32h dd 98765432h; 1-ci yarımilin ən yüksək hissəsi; Proqram seqmentində mov EAX,1; 2-ci kursun aşağı dərəcəli hissəsi mov EBX,0; 2-ci müddətin ən yüksək hissəsi EAX,mem321; Aşağı yarıları əlavə edin;Cəmi=100000000h>32 bit;EAX=000000h, adc EBX,mem32h daşıyın; Köhnə yarıları qatlayın və daşıyın. EBX=90000001h; Məbləğ: 9876543300000000h

Tam ədəd əlavə edin

Komanda əlavə edin birinci və ikinci operandların əlavə edilməsini yerinə yetirir. Birinci operandın (təyinat yerinin) orijinal dəyəri itirilir, əlavənin nəticəsi ilə əvəz olunur. İkinci operand dəyişməzdir. Komandanın ilk operandı kimi əlavə edin Siz registr (bir seqment istisna olmaqla) və ya yaddaş xanasını təyin edə bilərsiniz, ikincisi registr (bir seqment istisna olmaqla), yaddaş hüceyrəsi və ya dərhal dəyər ola bilər, lakin hər iki operandın eyni vaxtda yaddaş kimi müəyyənləşdirilməsinə icazə verilmir. hüceyrələr.

Operandlar bayt və ya söz ola bilər və işarələnmiş və ya işarəsiz nömrələri təmsil edə bilər. Əlavə etmək əmri həm adi tam, həm də ikili onluq ədədləri əlavə etmək üçün istifadə edilə bilər (nəticəni saxlamaq üçün AX registrindən istifadə etməklə). Paketdən çıxarılmamış ikilik kodlu onluq (BCD) ədədlər əmrdən sonra əlavə edilirsə əlavə edin aaa əmrindən istifadə edilməlidir; paketlənmiş nömrələr əlavə olunarsa, o zaman əmr bəli. Komanda OF, SF, ZF, AF, PF və CF bayraqlarına təsir göstərir.

Misal 1:

Mov BX,lFFEh mov CX,3 BX,CX əlavə edin; BX=2001h, CX=0003h

Misal 2:

Mov AX,25h AX,12h əlavə edin; AX=0037h

Misal 3:

; Məlumat sahələrində: mem dw 128 ;Proqram seqmentində: mem,100 əlavə edin; mem=228

Taşıma ilə ADC Tam əlavə

adc əmri birinci və ikinci operandları əlavə edir, nəticəyə daşıma bayrağının CF dəyərini əlavə edir. Birinci operandın (təyinat yerinin) orijinal dəyəri itirilir, əlavənin nəticəsi ilə əvəz olunur. İkinci operand dəyişməzdir. adc instruksiyasının birinci operandı registr (seqmentdən başqa) və ya yaddaş xanası, ikinci operand registr (seqmentdən başqa), yaddaş xanası və ya dərhal qiymət ola bilər, lakin onun müəyyənləşdirilməsinə icazə verilmir. hər iki operand eyni vaxtda yaddaş hüceyrələri kimi. Operandlar bayt və ya söz ola bilər və işarələnmiş və ya işarəsiz nömrələri təmsil edə bilər. adc əmri (əlavə əmri ilə birlikdə) adətən 32 bitlik nömrələri əlavə etmək üçün istifadə olunur. Komanda OF, SF, ZF, AF, PF və CF bayraqlarına təsir göstərir.

Misal 1

Mov AX,1125h adc AX,2C25h ;AX=3D4Bh, əgər CF = 1 ;AX=3D4Ah, əgər CF = 0 idisə
Misal 2; Məlumat sahələrində: numlow dw 0FFFFh ;2-ci terminin aşağı hissəsi numhigh dw 000Sh ;2-ci tirənin yüksək hissəsi;Nömrə 0005FFFFh=393215 ;Proqram seqmentində: mov AX,000Sh ;BX-in aşağı hissəsi, mov mov 0002h ; 1-ci hissənin ən yüksək hissəsi;Nömrə 00020005h=131077 əlavə edin AX,numlow;Aşağı hissələrin əlavəsi. AX=4, CF=1 adc BX, numhigh ;transfer.BX:AX=0008:0004h ilə daha yüksək hissələrin əlavə edilməsi. ;Nömrə 00080004h=524292
32 bitlik operandların və 32 bitlik prosessorların əlavə ünvanlama rejimlərinin istifadəsi məqbuldur. 32 bit operandları olan adc təlimatı 64 bitlik tam ədədləri əlavə etmək üçün istifadə edilə bilər. Misal 3; Məlumat sahələrində mem321 dd 0FFFFFFFFh ;1-ci müddətli mem32h dd 98765432h aşağı hissəsi ;1-ci tirənin yüksək hissəsi; Proqram seqmentində mov EAX,1 ;2-ci müddətli mov EBX,0 aşağı hissəsi ;2-ci müddətli yüksək hissəsi EAX,mem321 əlavə edin ;Aşağı yarımları əlavə edin;Cəmi=100000000b>32 bit;EAX=000000h, daşıyın adc EBX,mem32h ;Köhnə yarıları əlavə edin və köçürün. EBX=90000001h ;Məbləğ: 9876543300000000h
Tam ədəd əlavə edin

Əlavə etmək əmri birinci və ikinci operandları əlavə edir. Birinci operandın (təyinat yerinin) orijinal dəyəri itirilir, əlavənin nəticəsi ilə əvəz olunur. İkinci operand dəyişməzdir. Əlavə etmə əmrinin birinci operandını registr (bir seqmentdən başqa) və ya yaddaş xanası kimi təyin etmək olar, ikinci operand isə registr (bir seqmentdən başqa), yaddaş hüceyrəsi və ya dərhal dəyər ola bilər, lakin o, yaddaş hüceyrələri kimi hər iki operandın eyni vaxtda müəyyən edilməsinə icazə verilmir. Operandlar bayt və ya söz ola bilər və işarələnmiş və ya işarəsiz nömrələri təmsil edə bilər. Əlavə etmək əmri həm adi tam, həm də ikili onluq ədədləri əlavə etmək üçün istifadə edilə bilər (nəticəni saxlamaq üçün AX registrindən istifadə etməklə). Paketdən çıxarılmamış ikilik kodlu onluq (BCD) ədədləri əlavə edərkən əlavə etmə əmrindən sonra aaa əmrindən istifadə edin; dolu nömrələr əlavə olunarsa, daa əmrini verin. Komanda OF, SF, ZF, AF, PF və CF bayraqlarına təsir göstərir. Misal 1

Mov BX,lFFEh mov CX,3 əlavə edin BX,CX ;BX=2001h, CX=0003h
Misal 2 mov AX,25h əlavə et AX,12h ;AX=0037h
Misal 3; Məlumat sahələrində: mem dw 128 ;Proqram seqmentində: mem,100 əlavə edin ;mem=228
Misal 4 mov AX,0507h ;BCD qablaşdırılmamış 57 əlavə AL,05h ;BCD 5, AX=050Ch aaa ;AX=0602h, BCD 62
Misal 5 mov AL,57h ;BCD qablaşdırılmış 57 əlavə AL,05h ;BCD 5, AL=5Ch daa ;AL=62h, BCD 62

32 bitlik operandların və 32 bitlik prosessorların əlavə ünvanlama rejimlərinin istifadəsi məqbuldur. Misal

Mov EAX,98765432h EAX,11111111h əlavə edin; EAX=A9876543h
VƏ Məntiqi VƏ

və əmri birinci operandın ikinciyə məntiqi (bit üzrə) vurulmasını həyata keçirir. Birinci operandın (təyinat yerinin) orijinal dəyəri itirilir, çarpmanın nəticəsi ilə əvəz olunur. və əmrinin birinci operandı registr (bir seqmentdən başqa) və ya yaddaş xanası, ikinci operand registr (bir seqmentdən başqa), yaddaş xanası və ya dərhal qiymət ola bilər, lakin buna icazə verilmir. hər iki operandı eyni vaxtda yaddaş hüceyrələri kimi təyin edin. Operandlar bayt və ya söz ola bilər. Komanda SF, ZF və PF bayraqlarına təsir göstərir. Bit üzrə vurma qaydaları:

Birinci operand biti 0101 İkinci operand biti 0011 Nəticə biti 0001 Misal 1 mov AX,0FFEh və AX,5555h ;AX=0554h Misal 2; Məlumat sahələrində: mem dw 0С003h ;Proqram seqmentində: mov AX,700Eh və AX,mem ;AX=4002h

32 bitlik operandların və 32 bitlik prosessorların əlavə ünvanlama rejimlərinin istifadəsi məqbuldur. Misal

Mov EDX, 0FA8 8 0 0 4 lh və EDX,0FF00000Fh ; EDX = FA000001h
386P+ ARPL
Tələb olunan seçici imtiyaz səviyyəsinin tənzimlənməsi

aprl əmri seçicini maksimum icazə verilən imtiyaz səviyyəsini (adətən CS seçicisi) ehtiva edən nümunə ilə müqayisə edir və sınaqdan keçirilməli olan dəyəri iki imtiyaz səviyyəsindən aşağısına təyin edir. Səviyyə dəyişikliyi tələb olunmursa, ZF bayrağı sıfırlanır, tələb olunarsa, təyin edilir. aprl instruksiyasının birinci operandı 16 bitlik registr və ya yoxlanıla bilən seçicisi olan yaddaş sözü ola bilər; ikinci operand nümunə seçicisi olan 16 bitlik registrdir. 386+ BUND
Həddindən artıq massiv üçün massiv indeksinin yoxlanılması

Bağlanmış əmr, işarələnmiş nömrə kimi qəbul edilən göstərilən indeksin ikinci operand tərəfindən müəyyən edilmiş sərhədlər daxilində olub olmadığını yoxlayır. İndeks aşağıda və ya yuxarıda olan massivin hüdudlarından kənara çıxarsa, vektor 5 olan kəsmə yaradılır.Birinci operand yoxlanılan indeksi ehtiva edən registr olmalıdır, ikincisi - massivin iki sərhədi olan yaddaş sahəsinin ünvanı. yoxlanılır. Bağlanmış əmr həm 16-bit, həm də 32-bit operandlara icazə verir (lakin həm birinci, həm də ikinci operandlar eyni tipdə olmalıdır).

Montajçı- Butaforlar üçün montaj dili

Dummies üçün montaj dili.(#2) (C) Mixail Spitsyn 1995 Bayraqlar Prosessorun “F” registrinə bayraq deyilir. Bu nədir? Bayraq iki vəziyyətə malik olan dəyişəndir: təyin (birə bərabər) və təmizlənmiş (sıfıra bərabər). Buna görə də, "F" registrini səkkiz bayraq bitindən ibarət çoxluq kimi düşünmək olar. Biz onlardan yalnız dördünü istifadə edə bilərik: sıfır bayraq, daşıma bayrağı, işarə bayrağı və paritet daşması bayrağı.Arifmetik əməliyyatlar. Arifmetika çox faydalı bir elmdir, biz daim nəyisə hesablayırıq: toplamaq, çıxmaq, bölmək, çoxaltmaq. İndi bunu assemblerdə necə etmək barədə danışacağıq. Biz ən sadə şeydən başlayacağıq, bir şeyə birini əlavə edəcəyik, məsələn, "A"-nı qeyd etmək üçün: ***************************** *** ** LD A,NUBER INC A RET ******************************** Gördüyünüz kimi, bunun üçün çox sadədir "INC" əmri var - artım (bir artım), ardınca bir operand, yəni. bəzi qeydiyyatdan keçin və ya qeydiyyatdan keçin: ******************************** INC A INC HL INC H INC DE INC E INC IY INC E INC (HL) INC (IX+N) INC (IY+N) ******************************** ** Hər hansı bir yaddaş hüceyrəsini bir artırmaq lazımdırsa, bunu etməlisiniz: ********************************* ****** *** LD HL,ADDRES LD IX,ADDRES INC (HL) INC (IX+0) RET RET ********************* **************** ***** Birinci seçim daha sürətli işləyir və bir yaddaş hüceyrəsi ilə işləyirsinizsə, daha rahatdır, ancaq cədvəldə işləyirsinizsə, o zaman belə deyil. iqtisadi və çirkin. Müqayisə edin: cədvəldəki birinci, beşinci və onuncu baytları bir artırmalıyıq: ********************************* * LD HL,TABL+1 LD IX,TABL INC (HL) INC (IX+1) LD HL,TABL+5 INC (IX+5) INC (HL) INC (IX+10) LD HL,TABL+10 RET INC (HL) RET ******************************** Yuxarıda bir artım haqqında deyilənlərin hamısı doğrudur və azaltmaq üçün, yəni. bir azalmaq üçün: ******************************** DEKA A DEKA HL DEKA L DEKA IX DEKA H DEKA DE DEKA E DEKA BC DEKA D DEKA IY DEKA C IX DEKA DEKA B DEKA (HL) DEKA (IX+N) DEKA (IX+N) ********************* *********** İndi tutaq ki, “A” reyestrini bir yox, məsələn, on artırmalıyıq: **************** * ***************** LD A,NÖMRƏ ƏLAVƏ A,10 RET ************************* * ****** Siz "A" registrini nömrə və digər registrlərlə və "HL", "IX" və "IY" registr cütləri ilə ünvanlanan yaddaş xanası ilə əlavə edə bilərsiniz. Siz həmçinin "HL", "IX" və "IY" ilə registr cütləri əlavə edə bilərsiniz. (PureBasic - fayl sistemi) ******************************** ADD A, N ADD A, (HL) ADD A ,A ƏLAVƏ A,(IX+N) ƏLAVƏ A,B ƏLAVƏ A,(IY+N) ƏLAVƏ A,C ƏLAVƏ HL,HL ƏLAVƏ A,D ƏLAVƏ HL,BC ƏLAVƏ A,E ƏLAVƏ HL,DE ƏLAVƏ A,H HL,SP ƏLAVƏ EDİN IX,IX ƏLAVƏ EDİN IX,BC ƏLAVƏ IX,DE IX,SP ƏLAVƏ EDİN ******************************** ** Gördüyünüz kimi, əmrlər dəsti kifayət qədər böyükdür. Bu əmri yerinə yetirərkən xəta baş verə bilər: ******************************** LD A,45 LD B,230 ADD A ,B RET ******************************** "A" və "B" cəmi 255-i keçdi və buna görə də "A" "da 275 deyil, 20 olacaq ("A" rezin deyil); Daşmanın baş verdiyini bizə bildirmək üçün prosessor daşıma bayrağını birinə təyin edir. Yalnız onu yoxlamaq qalır. Necə ki, "INC"-də "DEC" var, "ADD" də "cüt" var, bu "SUB"-dur və onun özünəməxsus xüsusiyyətləri var. "SUB" əmri yalnız "A" registrində işləyir, ona görə də bu komanda üçün mnemonika yazarkən "A" buraxılır: ********************* *********** SUB N SUB C SUB A SUB H SUB B SUB D SUB E SUB (HL) SUB (IX+N) SUB (IY+N) ******** * ************************ Komanda daşıma bayrağına “ƏLAVƏ” ilə eyni şəkildə təsir edir. "ƏLAVƏ" və "SUB" əmrləri cütünə əlavə olaraq, başqa bir cüt var. "ADC" və "SBC" əmrləri daşıma bayrağını nəzərə alaraq fəaliyyət göstərir, yəni. Əlavə və ya çıxma zamanı daşıma bayrağının dəyəri nəticəyə əlavə edilir (çıxılır). Daşıma bayrağını təyin etmək üçün iki xüsusi əmr var - "SCF" və "CCF". "SCF" - daşıma bayrağını birinə təyin edin. "CCF" - daşıma bayrağını sıfıra qoyun. ******************************** ADC A,N SBC A,N ADC A,A SBC A,A ADC A ,H SBC A,H ADC A,L SBC A,L ADC A,D SBC A,D ADC A,E SBC A,E ADC A,B SBC A,B ADC A,C SBC A,C ADC A,( HL) SBC A,(HL) ADC A,(IX+N) SBC A,(IX+N) ADC A,(IY+N) SBC A,)IY+N) ADC HL,HL SBC HL,HL ADC HL ,BC SBC HL,BC ADC HL,DE SBC HL,DE ADC HL,SP SBC HL,SP **************************** **** İndi "ADC" və "SBC" əmrlərinin işinə nümunələr: ***************************** ************ * LD A,10 LD A,10 LD B,5 LD B,5 CCF CCF SBC A,B ADC A,B RET RET A=5 B=5 A=15 B=5 ******** ************************ “CCF” və “SBC A,B” iki əmrinin yerinə siz sadəcə olaraq “SUB B” qoya bilərsiniz, nəticə eyni olacaq. ******************************** LD A,10 LD A,10 LD B,5 LD B,5 SCF SCF SBC A,B ADC A,B RET RET A=4 B=5 A=16 B=5 **************************** **** Nəticələrdən göründüyü kimi, daşıma bayrağı əməliyyatın nəticəsinə əhəmiyyətli dərəcədə təsir edir. Çıxarılan zaman nəticədən çıxılır, toplayanda isə nəticəyə əlavə olunur. Toplama və çıxma əməliyyatları haqqında demək olar ki, hər şey əhatə olunub, indi bölmə və vurma haqqında danışacağıq. Təəssüf ki, SPECCY-də bölmə və vurma əmrləri yoxdur, lakin bu əmrlər bir neçə başqa əmrdən ibarət ola bilər. Məsələn, iki registr - "A" və "C" registrlərinin məzmununu çoxaltmalıyıq: ***************************** ********** *** LD A,10 LD C,5 LD B,A XOR A DÖNDÜ ƏLAVƏ A,C DJNZ LOOP RET *************** ************ ***** Nümunədə iki yeni əmr var - “XOR A” və “DJNZ LOOP”. "XOR A" "A" registrini təmizləyir və "DJNZ LOOP" əmri etiketlə işarələnmiş komandadan (məsələn, "LOOP") "DJNZ" əmrinə (ardınca eyni etiket) qədər bütün əmrləri təkrarlayır. ka, dövrün əvvəlində olduğu kimi); təkrarların sayı “B” reyestrində göstərilir. M-ni N-ə vurmağın M ədədinin özünə N dəfə əlavə edilməsindən istifadə edərək, yuxarıda verilmiş nümunəni başa düşə bilərsiniz. Bu əmlak bölmə üçün də istifadə edilə bilər. Özünüz cəhd edin. Növbəti dəfə biz müqayisə və bitlərlə işləmək üçün əmrlər haqqında danışacağıq.________________________________

Buraxılışdakı digər məqalələr:





Üst