ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ модСль процСссоров сСмСйства X86

ΠšΡƒΡ€Ρ Π»Π΅ΠΊΡ†ΠΈΠΉΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π Π°Π·ΠΌΠ΅Ρ€ записываСмых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ — слово ΠΈΠ»ΠΈ Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ слово. Π’Π°ΠΊΠΆΠ΅ Π² ΡΡ‚Π΅ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ нСпосрСдствСнныС значСния. Π’ ΡΡ‚Π΅ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ»Π°ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ сСгмСнтного рСгистра cs. Π”Ρ€ΡƒΠ³ΠΎΠΉ интСрСсный ΠΌΠΎΠΌΠ΅Π½Ρ‚ связан с Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΎΠΌ sp. Команда push esp/sp записываСт Π² ΡΡ‚Π΅ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ esp/sp ΠΏΠΎ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ Π΄ΠΎ Π²Ρ‹Π΄Π°Ρ‡ΠΈ этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Команда push ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ совмСстно с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ pop для записи Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΡΡ‚Π΅ΠΊ ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΡ… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ модСль процСссоров сСмСйства X86 (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ΠŸΠ ΠžΠ“Π ΠΠœΠœΠΠΠ― ΠœΠžΠ”Π•Π›Π¬ ΠŸΠ ΠžΠ¦Π•Π‘Π‘ΠžΠ ΠžΠ’ Π‘Π•ΠœΠ•Π™Π‘Π’Π’Π X86

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ рСгистры

Как слСдуСт ΠΈΠ· Π½Π°Π·Π²Π°Π½ΠΈΡ, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌΠΈ рСгистры Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ программист ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΏΡ€ΠΈ написании своих ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. К ΡΡ‚ΠΈΠΌ рСгистрам относятся (рис. 1):

Β· восСмь 32-Π±ΠΈΡ‚Π½Ρ‹Ρ… рСгистров, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ программистами для хранСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π°Π΄Ρ€Π΅ΡΠΎΠ² (ΠΈΡ… Π΅Ρ‰Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ рСгистрами ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния (РОН)):

eax/ax/ah/al;

ebx/bx/bh/bl;

edx/dx/dh/dl;

ecx/cx/ch/cl;

ebp/bp;

esi/si;

edi/di;

esp/sp.

ΡˆΠ΅ΡΡ‚ΡŒ рСгистров сСгмСнтов: cs, ds, ss, es, fs, gs;

рСгистры состояния ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡ:

рСгистр Ρ„Π»Π°Π³ΠΎΠ² eflags/flags;

рСгистр указатСля ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ eip/ip.

Рис. 1. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ рСгистры микропроцСссоров i486 ΠΈ Pentium

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· ΡΡ‚ΠΈΡ… рСгистров ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ с Π½Π°ΠΊΠ»ΠΎΠ½Π½ΠΎΠΉ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‡Π΅Ρ€Ρ‚ΠΎΠΉ?

НСт, это Π½Π΅ Ρ€Π°Π·Π½Ρ‹Π΅ рСгистры — это части ΠΎΠ΄Π½ΠΎΠ³ΠΎ большого 32-разрядного рСгистра. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

Π’Π°ΠΊ сдСлано для обСспСчСния работоспособности ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, написанных для ΠΌΠ»Π°Π΄ΡˆΠΈΡ… 16-разрядных ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ микропроцСссоров Ρ„ΠΈΡ€ΠΌΡ‹ Intel, начиная с i8086.

ΠœΠΈΠΊΡ€ΠΎΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Ρ‹ i486 ΠΈ Pentium ΠΈΠΌΠ΅ΡŽΡ‚ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ 32-разрядныС рСгистры. Π˜Ρ… ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ сСгмСнтных рСгистров, Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Ρƒ i8086, Π½ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ большС, Ρ‡Ρ‚ΠΎ ΠΈ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΎ Π² ΠΈΡ… ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΡΡ… — ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ приставку e (Extended).

РСгистры ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния

ВсС рСгистры этой Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΡΠ²ΠΎΠΈΠΌ «ΠΌΠ»Π°Π΄ΡˆΠΈΠΌ» частям.

Для ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ адрСсации ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ младшиС 16 ΠΈ 8-Π±ΠΈΡ‚Π½Ρ‹Π΅ части этих рСгистров. Π‘Ρ‚Π°Ρ€ΡˆΠΈΠ΅ 16 Π±ΠΈΡ‚ этих рСгистров ΠΊΠ°ΠΊ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ нСдоступны. Π­Ρ‚ΠΎ сдСлано, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅, для совмСстимости с ΠΌΠ»Π°Π΄ΡˆΠΈΠΌΠΈ 16-разрядными модСлями микропроцСссоров Ρ„ΠΈΡ€ΠΌΡ‹ Intel.

ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΠΌ рСгистры, относящиСся ΠΊ Π³Ρ€ΡƒΠΏΠΏΠ΅ рСгистров ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния. Π’Π°ΠΊ ΠΊΠ°ΠΊ эти рСгистры физичСски находятся Π² ΠΌΠΈΠΊΡ€ΠΎΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠΎ-логичСского устройства (АЛУ), Ρ‚ΠΎ ΠΈΡ… Π΅Ρ‰Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ рСгистрами АЛУ:

eax/ax/ah/al (Accumulator register) — аккумулятор.

ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠ΅Ρ‚ΡΡ для хранСния ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ… использованиС этого рСгистра ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ;

ebx/bx/bh/bl (Base register) — Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ рСгистр.

ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠ΅Ρ‚ΡΡ для хранСния Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ адрСса Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ;

ecx/cx/ch/cl (Count register) — рСгистр-счСтчик.

ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠ΅Ρ‚ΡΡ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ…, производящих Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ дСйствия. Π•Π³ΠΎ использованиС Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ нСявно ΠΈ ΡΠΊΡ€Ρ‹Ρ‚ΠΎ Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° loop ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ управлСния ΠΊΠΎΠΌΠ°Π½Π΄Π΅, находящСйся ΠΏΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ адрСсу, Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ рСгистра ecx/cx;

edx/dx/dh/dl (Data register) — рСгистр Π΄Π°Π½Π½Ρ‹Ρ….

Π’Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ eax/ax/ah/al, ΠΎΠ½ Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ… Π΅Π³ΠΎ использованиС ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ; для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ это происходит нСявно.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π²Π° рСгистра ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Ρ†Π΅ΠΏΠΎΡ‡Π΅Ρ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, производящих ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ элСмСнтов, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ 32, 16 ΠΈΠ»ΠΈ 8 Π±ΠΈΡ‚:

esi/si (Source Index register) — индСкс источника.

Π­Ρ‚ΠΎΡ‚ рСгистр Π² Ρ†Π΅ΠΏΠΎΡ‡Π΅Ρ‡Π½Ρ‹Ρ… опСрациях содСрТит Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ адрСс элСмСнта Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅-источникС;

edi/di (Destination Index register) — индСкс ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ° (получатСля).

Π­Ρ‚ΠΎΡ‚ рСгистр Π² Ρ†Π΅ΠΏΠΎΡ‡Π΅Ρ‡Π½Ρ‹Ρ… опСрациях содСрТит Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ адрСс Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅-ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ΅.

Π’ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ микропроцСссора Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ-Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ поддСрТиваСтся такая структура Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠ°ΠΊ стСк. Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со ΡΡ‚Π΅ΠΊΠΎΠΌ Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ микропроцСссора Π΅ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ микропроцСссора для этого ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ рСгистры:

esp/sp (Stack Pointer register) — рСгистр указатСля стСка.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ стСка Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ сСгмСнтС стСка.

ebp/bp (Base Pointer register) — рСгистр указатСля Π±Π°Π·Ρ‹ ΠΊΠ°Π΄Ρ€Π° стСка.

ΠŸΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Π²Π½ΡƒΡ‚Ρ€ΠΈ стСка.

НС ΡΠΏΠ΅ΡˆΠΈΡ‚Π΅ ΠΏΡƒΠ³Π°Ρ‚ΡŒΡΡ ΡΡ‚ΠΎΠ»ΡŒ ТСсткого Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ назначСния рСгистров АЛУ. На ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΠ· Π½ΠΈΡ… ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ для хранСния ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² практичСски Π² Π»ΡŽΠ±Ρ‹Ρ… сочСтаниях. Но, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ фиксированныС рСгистры для выполнСния своих дСйствий. Π­Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ.

ИспользованиС ТСсткого закрСплСния рСгистров для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ позволяСт Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΌΠ°ΡˆΠΈΠ½Π½ΠΎΠ΅ прСдставлСниС. Π—Π½Π°Π½ΠΈΠ΅ этих особСнностСй ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΠΏΡ€ΠΈ нСобходимости хотя Π±Ρ‹ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΎ Π±Π°ΠΉΡ‚ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡƒΡŽ ΠΊΠΎΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚Π½Ρ‹Π΅ рСгистры cs, ss, ds, es, gs, fs.

Π˜Ρ… ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΠ΅ обусловлСно спСцификой ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти микропроцСссорами Intel. Она Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ микропроцСссор Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½ΡƒΡŽ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Π²ΠΈΠ΄Π΅ Ρ‚Ρ€Π΅Ρ… частСй, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… сСгмСнтами. БоотвСтствСнно, такая организация памяти называСтся сСгмСнтной.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π° ΡΠ΅Π³ΠΌΠ΅Π½Ρ‚Ρ‹, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠΌΠ΅Π΅Ρ‚ доступ Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ сСгмСнтныС рСгистры. ЀактичСски, с Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΎΠΉ ΠΏΠΎΠΏΡ€Π°Π²ΠΊΠΎΠΉ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π΄Π°Π»Π΅Π΅, Π² ΡΡ‚ΠΈΡ… рСгистрах содСрТатся адрСса памяти с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ сСгмСнты. Π›ΠΎΠ³ΠΈΠΊΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ машинной ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ построСна Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, доступС ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ»ΠΈ ΠΊ ΡΡ‚Π΅ΠΊΡƒ нСявно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ адрСса Π²ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… сСгмСнтных рСгистрах. ΠœΠΈΠΊΡ€ΠΎΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ сСгмСнтов:

1. Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π°. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Для доступа ΠΊ ΡΡ‚ΠΎΠΌΡƒ сСгмСнту слуТит рСгистр cs (code segment register) — сСгмСнтный рСгистр ΠΊΠΎΠ΄Π°. Он ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ адрСс сСгмСнта с ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΈΠΌΠ΅Π΅Ρ‚ доступ микропроцСссор (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ эти ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ микропроцСссора).

2. Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ…. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ Π΄Π°Π½Π½Ρ‹Π΅. Для доступа ΠΊ ΡΡ‚ΠΎΠΌΡƒ сСгмСнту слуТит рСгистр ds (data segment register) — сСгмСнтный рСгистр Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ адрСс сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

3. Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚ стСка. Π­Ρ‚ΠΎΡ‚ сСгмСнт прСдставляСт собой ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ стСком. Π Π°Π±ΠΎΡ‚Ρƒ со ΡΡ‚Π΅ΠΊΠΎΠΌ микропроцСссор ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ: послСдний записанный Π² ΡΡ‚Ρƒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ элСмСнт выбираСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ. Для доступа ΠΊ ΡΡ‚ΠΎΠΌΡƒ сСгмСнту слуТит рСгистр ss (stack segment register) — сСгмСнтный рСгистр стСка, содСрТащий адрСс сСгмСнта стСка.

4. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ сСгмСнт Π΄Π°Π½Π½Ρ‹Ρ….

НСявно Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ выполнСния Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΈΠΌΠΈ Π΄Π°Π½Π½Ρ‹Π΅ располоТСны Π² ΡΠ΅Π³ΠΌΠ΅Π½Ρ‚Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, адрСс ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ находится Π² ΡΠ΅Π³ΠΌΠ΅Π½Ρ‚Π½ΠΎΠΌ рСгистрС ds.

Если ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ нСдостаточно ΠΎΠ΄Π½ΠΎΠ³ΠΎ сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎ ΠΎΠ½Π° ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‰Π΅ Ρ‚Ρ€ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ…. Но Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ…, адрСс ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ содСрТится Π² ΡΠ΅Π³ΠΌΠ΅Π½Ρ‚Π½ΠΎΠΌ рСгистрС ds, ΠΏΡ€ΠΈ использовании Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… сСгмСнтов Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡ… Π°Π΄Ρ€Π΅ΡΠ° трСбуСтся ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ явно с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… прСфиксов пСрСопрСдСлСния сСгмСнтов Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅.

АдрСса Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… сСгмСнтов Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ Π² Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ… es, gs, fs (extension data segment registers).

РСгистры состояния ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡ eflags ΠΈ ip

Они постоянно содСрТат ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΡΠΎΡΡ‚оянии, ΠΊΠ°ΠΊ самого микропроцСссора, Ρ‚Π°ΠΊ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹ Π½Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ эти рСгистры, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°Ρ… выполнСния ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΡΠΎΡΡ‚ояниС самого микропроцСссора.

eflags/flags (flag register) — рСгистр Ρ„Π»Π°Π³ΠΎΠ². Π Π°Π·Ρ€ΡΠ΄Π½ΠΎΡΡ‚ΡŒ eflags/flags — 32/16 Π±ΠΈΡ‚. ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΡ‚Ρ‹ Π΄Π°Π½Π½ΠΎΠ³ΠΎ рСгистра ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ся Ρ„Π»Π°Π³Π°ΠΌΠΈ. Младшая Ρ‡Π°ΡΡ‚ΡŒ этого рСгистра ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π° рСгистру flags для i8086.

Рис. 2. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ рСгистра eflags

Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚Π΅ΠΉ использования, Ρ„Π»Π°Π³ΠΈ рСгистра eflags/flags ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Ρ‚Ρ€ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹:

8 Ρ„Π»Π°Π³ΠΎΠ² состояния. Π­Ρ‚ΠΈ Ρ„Π»Π°Π³ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ послС выполнСния ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄. Π€Π»Π°Π³ΠΈ состояния рСгистра eflags ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ особСнности Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° исполнСния арифмСтичСских ΠΈΠ»ΠΈ логичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ состояниС Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ процСсса ΠΈ Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π½Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄ условных ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² ΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

1 Ρ„Π»Π°Π³ управлСния — df (Directory Flag). Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„Π»Π°Π³Π° df опрСдСляСт Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ поэлСмСнтной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ Π΄Π°Π½Π½Ρ‹Ρ…: ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° строки ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ (df = 0) Π»ΠΈΠ±ΠΎ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΎΡ‚ ΠΊΠΎΠ½Ρ†Π° строки ΠΊ Π΅Π΅ Π½Π°Ρ‡Π°Π»Ρƒ (df = 1).

5 систСмных Ρ„Π»Π°Π³ΠΎΠ², ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Π²Π²ΠΎΠ΄ΠΎΠΌ/Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ, маскируСмыми прСрываниями, ΠΎΡ‚Π»Π°Π΄ΠΊΠΎΠΉ, ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ΅ΠΆΠ΄Ρƒ Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅ΠΆΠΈΠΌΠΎΠΌ 8086. ΠŸΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ся ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±Π΅Π· нСобходимости эти Ρ„Π»Π°Π³ΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв это ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΡŽ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

eip/ip (Instraction Pointer register) — рСгистр-ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄.

РСгистр eip/ip ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·Ρ€ΡΠ΄Π½ΠΎΡΡ‚ΡŒ 32/16 Π±ΠΈΡ‚ ΠΈ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ смСщСниС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‰Π΅ΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ содСрТимого сСгмСнтного рСгистра cs Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ сСгмСнтС ΠΊΠΎΠΌΠ°Π½Π΄. Π­Ρ‚ΠΎΡ‚ рСгистр нСпосрСдствСнно нСдоступСн программисту, Π½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ значСния производятся Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ управлСния, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ относятся ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ условных ΠΈ Π±Π΅Π·ΡƒΡΠ»ΠΎΠ²Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ², Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΈΠ· ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€. Π’ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ рСгистра eip/ip.

Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ€Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ рСгистры ΠΈΠ»ΠΈ ячСйки памяти, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… хранятся Π΄Π°Π½Π½Ρ‹Π΅. БущСствуСт нСсколько Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…:

1. НСпосрСдствСнныС Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ собой числовыС ΠΈΠ»ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ значСния, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. 20d, 0a2h, 10111b

2. Π”Π°Π½Π½Ρ‹Π΅ простого Ρ‚ΠΈΠΏΠ°, описываСмыС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² рСзСрвирования памяти, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ самыС элСмСнтарныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΡŽ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ числовой ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

Π­Ρ‚ΠΈ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ элСмСнтарными, ΠΈΠ»ΠΈ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ; Ρ€Π°Π±ΠΎΡ‚Π° с Π½ΠΈΠΌΠΈ поддСрТиваСтся Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ систСмы ΠΊΠΎΠΌΠ°Π½Π΄ микропроцСссора. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄Π°Π½Π½Ρ‹Π΅ этих Ρ‚ΠΈΠΏΠΎΠ², ΠΌΠΎΠΆΠ½ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ практичСски Π»ΡŽΠ±ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ. Но Π½Π°ΡΠΊΠΎΠ»ΡŒΠΊΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄ΠΎΠ±Π½ΠΎ — Π²ΠΎΡ‚ вопрос.

3. Π”Π°Π½Π½Ρ‹Π΅ слоТного Ρ‚ΠΈΠΏΠ°, (массивы, структуры, записи ΠΈ ΠΏΡ€.) ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π²Π²Π΅Π΄Π΅Π½Ρ‹ Π² ΡΠ·Ρ‹ΠΊ ассСмблСра с Ρ†Π΅Π»ΡŒΡŽ облСгчСния Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π‘Π»ΠΎΠΆΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… строятся Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π±Ρ‹ ΠΊΠΈΡ€ΠΏΠΈΡ‡ΠΈΠΊΠ°ΠΌΠΈ для ΠΈΡ… ΠΏΠΎΡΡ‚роСния.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

слоТных Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… позволяСт нСсколько ΡΠ³Π»Π°Π΄ΠΈΡ‚ΡŒ различия ΠΌΠ΅ΠΆΠ΄Ρƒ языками высокого уровня ΠΈ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ€ΠΎΠΌ

ЀизичСская интСрпрСтация Π΄Π°Π½Π½Ρ‹Ρ… простого Ρ‚ΠΈΠΏΠ° основываСтся Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…:

Β· Π±Π°ΠΉΡ‚ — восСмь ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ располоТСнных Π±ΠΈΡ‚ΠΎΠ², ΠΏΡ€ΠΎΠ½ΡƒΠΌΠ΅Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ 0 Π΄ΠΎ 7, ΠΏΡ€ΠΈ этом Π±ΠΈΡ‚ 0 являСтся самым младшим Π·Π½Π°Ρ‡Π°Ρ‰ΠΈΠΌ Π±ΠΈΡ‚ΠΎΠΌ;

Β· слово — ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ· Π΄Π²ΡƒΡ… Π±Π°ΠΉΡ‚, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ адрСса. Π Π°Π·ΠΌΠ΅Ρ€ слова — 16 Π±ΠΈΡ‚; Π±ΠΈΡ‚Ρ‹ Π² ΡΠ»ΠΎΠ²Π΅ Π½ΡƒΠΌΠ΅Ρ€ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ 0 Π΄ΠΎ 15. Π‘Π°ΠΉΡ‚, содСрТащий Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π±ΠΈΡ‚, называСтся младшим Π±Π°ΠΉΡ‚ΠΎΠΌ, Π° Π±Π°ΠΉΡ‚, содСрТащий 15-ΠΉ Π±ΠΈΡ‚ — ΡΡ‚Π°Ρ€ΡˆΠΈΠΌ Π±Π°ΠΉΡ‚ΠΎΠΌ. ΠœΠΈΠΊΡ€ΠΎΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Ρ‹ Intel ΠΈΠΌΠ΅ΡŽΡ‚ Π²Π°ΠΆΠ½ΡƒΡŽ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ — младший Π±Π°ΠΉΡ‚ всСгда хранится ΠΏΠΎ ΠΌΠ΅Π½ΡŒΡˆΠ΅ΠΌΡƒ адрСсу. АдрСсом слова считаСтся адрСс Π΅Π³ΠΎ младшСго Π±Π°ΠΉΡ‚Π°. АдрСс ΡΡ‚Π°Ρ€ΡˆΠ΅Π³ΠΎ Π±Π°ΠΉΡ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован для доступа ΠΊ ΡΡ‚Π°Ρ€ΡˆΠ΅ΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅ слова.

Β· Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ слово — ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… Π±Π°ΠΉΡ‚ (32 Π±ΠΈΡ‚Π°), располоТСнных ΠΏΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ адрСсам.

Β· ΡƒΡ‡Π΅Ρ‚Π²Π΅Ρ€Π΅Π½Π½ΠΎΠ΅ слово — ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ· Π²ΠΎΡΡŒΠΌΠΈ Π±Π°ΠΉΡ‚ (64 Π±ΠΈΡ‚Π°), располоТСнных ΠΏΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ адрСсам.

Β·

Рис. 3. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… микропроцСссора

ЛогичСская интСрпрСтация этих Ρ‚ΠΈΠΏΠΎΠ²:

— Π¦Π΅Π»Ρ‹ΠΉ Ρ‚ΠΈΠΏ со Π·Π½Π°ΠΊΠΎΠΌ — Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ со Π·Π½Π°ΠΊΠΎΠΌ, Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 8, 16 ΠΈΠ»ΠΈ 32 Π±ΠΈΡ‚Π°. Π—Π½Π°ΠΊ Π² ΡΡ‚ΠΎΠΌ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΌ числС содСрТится Π² 7, 15 ΠΈΠ»ΠΈ 31-ΠΌ Π±ΠΈΡ‚Π΅ соотвСтствСнно. Ноль Π² ΡΡ‚ΠΈΡ… Π±ΠΈΡ‚Π°Ρ… Π² ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°Ρ… соотвСтствуСт ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ числу, Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Π° — ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ. ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ числа ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅. ЧисловыС Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹ для этого Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

o 8-разрядноС Ρ†Π΅Π»ΠΎΠ΅ — ΠΎΡ‚ -128 Π΄ΠΎ +127;

o 16-разрядноС Ρ†Π΅Π»ΠΎΠ΅ — ΠΎΡ‚ -32 768 Π΄ΠΎ +32 767;

o 32-разрядноС Ρ†Π΅Π»ΠΎΠ΅ — ΠΎΡ‚ -231 Π΄ΠΎ +231-1.

— Π¦Π΅Π»Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π±Π΅Π· Π·Π½Π°ΠΊΠ° — Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±Π΅Π· Π·Π½Π°ΠΊΠ°, Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 8, 16 ΠΈΠ»ΠΈ 32 Π±ΠΈΡ‚Π°. Числовой Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ для этого Ρ‚ΠΈΠΏΠ° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

o Π±Π°ΠΉΡ‚ — ΠΎΡ‚ 0 Π΄ΠΎ 255;

o ΡΠ»ΠΎΠ²ΠΎ — ΠΎΡ‚ 0 Π΄ΠΎ 65 535;

o Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ слово — ΠΎΡ‚ 0 Π΄ΠΎ 232-1.

— Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ Π΄Π²ΡƒΡ… Ρ‚ΠΈΠΏΠΎΠ²:

o Π±Π»ΠΈΠΆΠ½Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ° — 32-разрядный логичСский адрСс, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ собой ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ смСщСниС Π² Π±Π°ΠΉΡ‚Π°Ρ… ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° сСгмСнта. Π­Ρ‚ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΡΠΏΠ»ΠΎΡˆΠ½ΠΎΠΉ (плоской) ΠΌΠΎΠ΄Π΅Π»ΠΈ памяти, Π³Π΄Π΅ сСгмСнтныС ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹;

o Π΄Π°Π»ΡŒΠ½Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ° — 48-разрядный логичСский адрСс, состоящий ΠΈΠ· Π΄Π²ΡƒΡ… частСй: 16-разрядной сСгмСнтной части — сСлСктора, ΠΈ 32-разрядного смСщСния.

— Π¦Π΅ΠΏΠΎΡ‡ΠΊΠ° — ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ собой Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Π±Π°ΠΉΡ‚ΠΎΠ², слов ΠΈΠ»ΠΈ Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… слов максимальной Π΄Π»ΠΈΠ½Ρ‹ Π΄ΠΎ 4 Π“Π±Π°ΠΉΡ‚.

— Π‘ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ прСдставляСт собой Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±ΠΈΡ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π±ΠΈΡ‚ являСтся нСзависимым ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ пСрСмСнная. Π‘ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с Π»ΡŽΠ±ΠΎΠ³ΠΎ Π±ΠΈΡ‚Π° любого Π±Π°ΠΉΡ‚Π° ΠΈ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π΄ΠΎ 32 Π±ΠΈΡ‚.

— ΠΠ΅ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎ-дСсятичный Ρ‚ΠΈΠΏ — Π±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ΅ прСдставлСниС дСсятичной Ρ†ΠΈΡ„Ρ€Ρ‹ ΠΎΡ‚ 0 Π΄ΠΎ 9. НСупакованныС дСсятичныС числа хранятся ΠΊΠ°ΠΊ Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Π΅ значСния Π±Π΅Π· Π·Π½Π°ΠΊΠ° ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ Ρ†ΠΈΡ„Ρ€Π΅ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π±Π°ΠΉΡ‚Π΅. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ†ΠΈΡ„Ρ€Ρ‹ опрСдСляСтся младшим ΠΏΠΎΠ»ΡƒΠ±Π°ΠΉΡ‚ΠΎΠΌ.

— Π£ΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎ-дСсятичный Ρ‚ΠΈΠΏ прСдставляСт собой ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½ΠΎΠ΅ прСдставлСниС Π΄Π²ΡƒΡ… дСсятичных Ρ†ΠΈΡ„Ρ€ ΠΎΡ‚ 0 Π΄ΠΎ 9 Π² ΠΎΠ΄Π½ΠΎΠΌ Π±Π°ΠΉΡ‚Π΅. КаТдая Ρ†ΠΈΡ„Ρ€Π° хранится Π² ΡΠ²ΠΎΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΠ±Π°ΠΉΡ‚Π΅. Π¦ΠΈΡ„Ρ€Π° Π² ΡΡ‚Π°Ρ€ΡˆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΠ±Π°ΠΉΡ‚Π΅ (Π±ΠΈΡ‚Ρ‹ 4−7) являСтся ΡΡ‚Π°Ρ€ΡˆΠ΅ΠΉ.

Рис. 4. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ логичСскиС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… микропроцСссора

Π―Π·Ρ‹ΠΊ ΠΌΠΈΠΊΡ€ΠΎΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. АссСмблСр.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ€Π΅:

Model small ;модСль ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈΠ»ΠΈ ΠΆΠ΅ количСство памяти Π½Π° ΡΠ΅Π³ΠΌΠ΅Π½Ρ‚

.data ;сСгмСнт Π΄Π°Π½Π½Ρ‹Ρ…

;описаниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

.stack 100h ;сСгмСнт стСка

.code ;сСгмСнт Π΄Π°Π½Π½Ρ‹Ρ…

;ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, ΠΌΠ°ΠΊΡ€ΠΎΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

main:

;основная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°

end main

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ рСзСрвирования памяти

Для описания простых Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ рСзСрвирования ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, ΠΏΠΎ ΡΡƒΡ‚ΠΈ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ указаниями транслятору Π½Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ объСма памяти. Если ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ аналогию с ΡΠ·Ρ‹ΠΊΠ°ΠΌΠΈ высокого уровня, Ρ‚ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ рСзСрвирования ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ опрСдСлСниями ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

Машинного эквивалСнта этим Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°ΠΌ Π½Π΅Ρ‚; просто транслятор, обрабатывая ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ‚Π°ΠΊΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ, выдСляСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ количСство Π±Π°ΠΉΡ‚ памяти ΠΈ ΠΏΡ€ΠΈ нСобходимости ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ эту ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ рСзСрвирования ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… простых Ρ‚ΠΈΠΏΠΎΠ² ΠΈΠΌΠ΅ΡŽΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚:

Рис. 5. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ описания Π΄Π°Π½Π½Ρ‹Ρ… простых Ρ‚ΠΈΠΏΠΎΠ²

На Ρ€ΠΈΡ. 5 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ обозначСния:

Β· ? ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ содСрТимоС поля Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈ Π·Π°Π΄Π°Π½ΠΈΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ с Ρ‚Π°ΠΊΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ выраТСния содСрТимоС Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ участка физичСской памяти ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. ЀактичСски, создаСтся нСинициализированная пСрСмСнная;

Β· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ — Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ занСсСно Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ послС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ЀактичСски, создаСтся инициализированная пСрСмСнная, Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ константы, строки символов, константныС ΠΈ Π°Π΄Ρ€Π΅ΡΠ½Ρ‹Π΅ выраТСния Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π°Ρ информация ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ 1;

Β· Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ — итСративная конструкция с ΡΠΈΠ½Ρ‚аксисом, описанным Π½Π° Ρ€ΠΈΡ. 5.17. Π­Ρ‚Π° конструкция позволяСт ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ занСсСниС Π² Ρ„ΠΈΠ·ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ выраТСния Π² ΡΠΊΠΎΠ±ΠΊΠ°Ρ… n Ρ€Π°Π·.

Β· имя — Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ символичСскоС имя ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΈΠ»ΠΈ ячСйки памяти Π² ΡΠ΅Π³ΠΌΠ΅Π½Ρ‚Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

Β· db — Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ памяти для Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 1 Π±Π°ΠΉΡ‚. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ db ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ значСния:

o Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ константу, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΡƒΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°:

§ для чисСл со Π·Π½Π°ΠΊΠΎΠΌ −128…+127;

§ для чисСл Π±Π΅Π· Π·Π½Π°ΠΊΠ° 0…255;

o ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½ΡƒΡŽ строку ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ символов. Π‘Ρ‚Ρ€ΠΎΠΊΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ. Π’ ΡΡ‚ΠΎΠΌ случаС опрСдСляСтся ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π°ΠΉΡ‚, сколько символов Π² ΡΡ‚Ρ€ΠΎΠΊΠ΅.

Β· dw — Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ памяти для Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 2 Π±Π°ΠΉΡ‚Π°. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ dw ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ значСния:

o Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ константу, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΡƒΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°:

§ для чисСл со Π·Π½Π°ΠΊΠΎΠΌ -32 768…32 767;

§ для чисСл Π±Π΅Π· Π·Π½Π°ΠΊΠ° 0…65 535;

o Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰Π΅Π΅ 16 ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΅ Π±ΠΈΡ‚, Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ смСщСниС Π² 16-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΌ сСгмСнтС ΠΈΠ»ΠΈ адрСс сСгмСнта;

o 1- ΠΈΠ»ΠΈ 2-Π±Π°ΠΉΡ‚ΠΎΠ²ΡƒΡŽ строку, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Π°Ρ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ.

Β· dd — Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ памяти для Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 4 Π±Π°ΠΉΡ‚Π°. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ dd ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ значСния:

o Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ константу, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΡƒΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°:

§ для i386 ΠΈ Π²Ρ‹ΡˆΠ΅:

§ для чисСл со Π·Π½Π°ΠΊΠΎΠΌ -2 147 483 648…+2 147 483 647;

§ для чисСл Π±Π΅Π· Π·Π½Π°ΠΊΠ° 0…4 294 967 295;

o ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ»ΠΈ адрСсноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, состоящСС ΠΈΠ· 16-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ адрСса сСгмСнта ΠΈ 16-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ смСщСния;

o ΡΡ‚Ρ€ΠΎΠΊΡƒ Π΄Π»ΠΈΠ½ΠΎΠΉ Π΄ΠΎ 4 символов, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΡƒΡŽ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ.

Β· df — Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ памяти для Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 6 Π±Π°ΠΉΡ‚;

Β· dp — Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ памяти для Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 6 Π±Π°ΠΉΡ‚. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°ΠΌΠΈ df ΠΈ dp ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ значСния:

o Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ константу, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΡƒΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°:

§ для чисСл со Π·Π½Π°ΠΊΠΎΠΌ -2 147 483 648…+2 147 483 647;

§ для чисСл Π±Π΅Π· Π·Π½Π°ΠΊΠ° 0…4 294 967 295;

o ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ»ΠΈ адрСсноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, состоящСС ΠΈΠ· 32 ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΅ Π±ΠΈΡ‚ (для i80386) ΠΈΠ»ΠΈ 16 ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΅ Π±ΠΈΡ‚ (для ΠΌΠ»Π°Π΄ΡˆΠΈΡ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ микропроцСссоров Intel);

o Π°Π΄Ρ€Π΅ΡΠ½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, состоящСС ΠΈΠ· 16-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ сСгмСнта ΠΈ 32-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ смСщСния;

o ΡΡ‚Ρ€ΠΎΠΊΡƒ Π΄Π»ΠΈΠ½ΠΎΠΉ Π΄ΠΎ 6 Π±Π°ΠΉΡ‚, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΡƒΡŽ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ.

Β· dq — Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ памяти для Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 8 Π±Π°ΠΉΡ‚. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ dq ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ значСния:

o ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ»ΠΈ адрСсноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, состоящСС ΠΈΠ· 32 ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΅ Π±ΠΈΡ‚

o ΠΊΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρƒ со Π·Π½Π°ΠΊΠΎΠΌ ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° -263…263−1;

o ΠΊΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρƒ Π±Π΅Π· Π·Π½Π°ΠΊΠ° ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° 0…264−1;

o ΡΡ‚Ρ€ΠΎΠΊΡƒ Π΄Π»ΠΈΠ½ΠΎΠΉ Π΄ΠΎ 8 Π±Π°ΠΉΡ‚, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΡƒΡŽ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ.

Β· dt — Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ памяти для Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 10 Π±Π°ΠΉΡ‚. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ dt ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ значСния:

o ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ»ΠΈ адрСсноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, состоящСС ΠΈΠ· 32 ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΅ Π±ΠΈΡ‚

o Π°Π΄Ρ€Π΅ΡΠ½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, состоящСС ΠΈΠ· 16-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ сСгмСнта ΠΈ 32-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ смСщСния;

o ΠΊΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρƒ со Π·Π½Π°ΠΊΠΎΠΌ ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° -279…279−1;

o ΠΊΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρƒ Π±Π΅Π· Π·Π½Π°ΠΊΠ° ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° 0…280−1;

o ΡΡ‚Ρ€ΠΎΠΊΡƒ Π΄Π»ΠΈΠ½ΠΎΠΉ Π΄ΠΎ 10 Π±Π°ΠΉΡ‚, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΡƒΡŽ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ;

o ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½ΡƒΡŽ Π΄Π΅ΡΡΡ‚ΠΈΡ‡Π½ΡƒΡŽ константу Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ 0…99 999 999 999 999 999 999.

ΠžΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΡƒΡΡΠ½ΠΈΡ‚ΡŒ сСбС порядок размСщСния Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ. Он Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ связан с Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ микропроцСссора с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. ΠœΠΈΠΊΡ€ΠΎΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Ρ‹ Intel Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ слСдования Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ: младший Π±Π°ΠΉΡ‚ ΠΏΠΎ ΠΌΠ»Π°Π΄ΡˆΠ΅ΠΌΡƒ адрСсу.

Для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° рассмотрим листинг 1, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ сСгмСнт Π΄Π°Π½Π½Ρ‹Ρ…. Π’ ΡΡ‚ΠΎΠΌ сСгмСнтС Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ нСсколько Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² описания простых Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ….

Листинг 1. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² рСзСрвирования ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Π²ΠΎΠ΄ΠΈΡ‚ строку с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹.

model small

.stack 100h

.data

message db 'Массив Π±Π°ΠΉΡ‚, содСрТащих ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅', 10,13 '$'

po db 1, 3, 4, 5, 0fh, 0bh, 32, 01011b

perem1 db 0ffh

perem2 dw 3a7fh

perem3 dd 0f54d567ah

k1 db 10

k2 db ?

mas db 10 dup ('?')

adr dw k1

adr_full dd perem3

.code

start:

mov ax,@data

mov ds, ax

mov ah, 0ah

mov dx, offset message; mov dx, adr

int 21h

mov ax, 4c00h

int 21h

end start

БистСма ΠΊΠΎΠΌΠ°Π½Π΄

Π€ΠΎΡ€ΠΌΠ°Ρ‚ прСдлоТСния ассСмблСра

[имя ΠΌΠ΅Ρ‚ΠΊΠΈ:] КОП [ΠΎΠΏΠ΅Ρ€Π°Π½Π΄1] [, ΠΎΠΏΠ΅Ρ€Π°Π½Π΄2] [;ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ]

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ пСрСсылки Π΄Π°Π½Π½Ρ‹Ρ…

mov <οΏ½ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ назначСния>,<οΏ½ΠΎΠΏΠ΅Ρ€Π°Π½Π΄-источник>

ΠΌΠΎΠΆΠ½ΠΎ

НСльзя

Π”ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ

mov Π°Ρ…, Π²Ρ…; Π°Ρ…:=Π²Ρ…

mov Π°Ρ…, 0Π°2h; Π°Ρ…:= 0Π°2h

mov per1, ax

mov ax, bh

mov per1, per2

mov ds, per1

mov cs, ds

mov cs, ax; ΠΏΠ°Ρ€Π° cs: ip ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ адрСс ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

mov ah, bh

mov al, per2

mov per1, al

mov ax, per1

mov ds, ax

mov ax, ds Π»ΠΈΠ±ΠΎ push ds

mov cs, ax pop cs

xchg <οΏ½ΠΎΠΏΠ΅Ρ€Π°Π½Π΄1>,<οΏ½ΠΎΠΏΠ΅Ρ€Π°Π½Π΄2>; Π΄Π²ΡƒΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π°:=Π²; Π²:=с; с:=Π°

xchg dl, dh; мСняСт мСстами Π΄Π°Π½Π½Ρ‹Π΅

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° Π² ΠΏΠΎΡ€Ρ‚

in аккумулятор, Π½ΠΎΠΌΠ΅Ρ€_ΠΏΠΎΡ€Ρ‚Π° — Π²Π²ΠΎΠ΄ Π² Π°ΠΊΠΊΡƒΠΌΡƒΠ»ΡΡ‚ΠΎΡ€ ΠΈΠ· ΠΏΠΎΡ€Ρ‚Π°

out ΠΏΠΎΡ€Ρ‚, аккумулятор — Π²Ρ‹Π²ΠΎΠ΄ содСрТимого аккумулятора Π² ΠΏΠΎΡ€Ρ‚

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π°Π΄Ρ€Π΅ΡΠ°ΠΌΠΈ ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Слями памяти

lea Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, источник — Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° эффСктивного адрСса источника Π² Ρ€Π΅Π³ΠΈΡΡ‚Ρ€-Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅;

lea dx, x; Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ mov dx, offset x

lds Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, источник — Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° эффСктивного адрСса источника Π² Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ назначСния ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° указатСля (адрСс сСгмСнта Π³Π΄Π΅ содСрТится источник) Π² Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ… ds;

les Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, источник —-//-рСгистр Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ… es;

lgs Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, источник — -//- рСгистр Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ… gs;

lfs Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, источник — -//- рСгистр Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ… fs;

lss Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, источник — -//- рСгистр сСгмСнта стСка ss.

les dx, per1 ;ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° per1 Π² ΠΏΠ°Ρ€Ρƒ es: dx

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со ΡΡ‚Π΅ΠΊΠΎΠΌ

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со ΡΡ‚Π΅ΠΊΠΎΠΌ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ Ρ‚Ρ€ΠΈ рСгистра:

ss — сСгмСнтный рСгистр стСка;

sp/esp — рСгистр указатСля стСка;

bp/ebp — рСгистр указатСля Π±Π°Π·Ρ‹ ΠΊΠ°Π΄Ρ€Π° стСка.

push источник — запись значСния источник Π² Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ стСка.

Алгоритм Ρ€Π°Π±ΠΎΡ‚Ρ‹:

Β· ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ указатСля стСка esp/sp Π½Π° 4/2 (Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π° адрСса — use16 ΠΈΠ»ΠΈ use32);

Β· Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ источник Π² Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ стСка (Π°Π΄Ρ€Π΅ΡΡƒΠ΅ΠΌΡƒΡŽ ΠΏΠ°Ρ€ΠΎΠΉ ss: esp/sp).

Π Π°Π·ΠΌΠ΅Ρ€ записываСмых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ — слово ΠΈΠ»ΠΈ Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ слово. Π’Π°ΠΊΠΆΠ΅ Π² ΡΡ‚Π΅ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ нСпосрСдствСнныС значСния. Π’ ΡΡ‚Π΅ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ»Π°ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ сСгмСнтного рСгистра cs. Π”Ρ€ΡƒΠ³ΠΎΠΉ интСрСсный ΠΌΠΎΠΌΠ΅Π½Ρ‚ связан с Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΎΠΌ sp. Команда push esp/sp записываСт Π² ΡΡ‚Π΅ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ esp/sp ΠΏΠΎ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ Π΄ΠΎ Π²Ρ‹Π΄Π°Ρ‡ΠΈ этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Команда push ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ совмСстно с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ pop для записи Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΡΡ‚Π΅ΠΊ ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΡ ΠΈΡ… ΠΈΠ· ΡΡ‚Π΅ΠΊΠ°

pop Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ — запись значСния ΠΈΠ· Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ стСка ΠΏΠΎ ΠΌΠ΅ΡΡ‚Ρƒ, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠΌ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ этом «ΡΠ½ΠΈΠΌΠ°Π΅Ρ‚ΡΡ» с Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ стСка.

Push ax

Push bx

push cx

pop cx

pop bx

pop ax

push ax

pop bx; Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ mov bx, ax

pusha - Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π² ΡΡ‚Π΅ΠΊΠ΅ рСгистров ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ: ax, cx, dx, bx, sp, bp, si, di

pushad — Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π² ΡΡ‚Π΅ΠΊΠ΅ рСгистров ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ: eax, ecx, edx, ebx, esp, ebp, esi, edi

pushf — Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π² Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ стСка (ss:sp) содСрТимого рСгистра Ρ„Π»Π°Π³ΠΎΠ² flags

pushfd — Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π² ΡΡ‚Π΅ΠΊΠ΅ содСрТимого рСгистра Ρ„Π»Π°Π³ΠΎΠ² eflags.

popa — ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· ΡΡ‚Π΅ΠΊΠ° рСгистров ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния di, si, bp, sp, bx, dx, cx, ax

popad — ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· ΡΡ‚Π΅ΠΊΠ° рСгистров ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния edi, esi, ebp, esp, ebx, edx, ecx, eax

popf — ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· ΡΡ‚Π΅ΠΊΠ° слова ΠΈ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ Π² Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ Ρ„Π»Π°Π³ΠΎΠ² flags

popfd — ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· ΡΡ‚Π΅ΠΊΠ° Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ слова ΠΈ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ Π² Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ Ρ„Π»Π°Π³ΠΎΠ² eflags

ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ вычислСний

ЛогичСскиС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

Π›ΡŽΠ±Π°Ρ логичСская ΠΊΠΎΠΌΠ°Π½Π΄Π° мСняСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ„Π»Π°Π³ΠΎΠ² of, sf, zf, pf, cf (ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Π·Π½Π°ΠΊ, нуля, ΠΏΠ°Ρ€ΠΈΡ‚Π΅Ρ‚, пСрСнос)

and ΠΎΠΏΠ΅Ρ€Π°Π½Π΄1, ΠΎΠΏΠ΅Ρ€Π°Π½Π΄2 — опСрация логичСского умноТСния (И — ΠΊΠΎΠ½ΡŠΡŽΠ½ΠΊΡ†ΠΈΡ).

ΠΎΠΏ1:=ΠΎΠΏ1? ΠΎΠΏ2

and ah, 0a1h; ah:=ah?0ah

and bx, cx; bx:=bx?cx

and dx, x1; dx:=dx?x1

or ΠΎΠΏΠ΅Ρ€Π°Π½Π΄1, ΠΎΠΏΠ΅Ρ€Π°Π½Π΄2 — опСрация логичСского слоТСния (Π˜Π›Π˜ — Π΄ΠΈΠ·ΡŠΡŽΠ½ΠΊΡ†ΠΈΡŽ)

or al, x1; ΠΎΠΏ1:=ΠΎΠΏ1 & ΠΎΠΏ2

or eax, edx

or dx, x1

xor ΠΎΠΏΠ΅Ρ€Π°Π½Π΄1, ΠΎΠΏΠ΅Ρ€Π°Π½Π΄2 — опСрация логичСского ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π³ΠΎ слоТСния (ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π³ΠΎ Π˜Π›Π˜ Π˜Π›Π˜-НЕ)

test ΠΎΠΏΠ΅Ρ€Π°Π½Π΄1, ΠΎΠΏΠ΅Ρ€Π°Π½Π΄2 — опСрация «ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ» (способом логичСского умноТСния).

Команда выполняСт поразрядно Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ И Π½Π°Π΄ Π±ΠΈΡ‚Π°ΠΌΠΈ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Π½Π΄1 ΠΈ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄2. БостояниС ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² остаСтся ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΌ, ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„Π»Π°Π³ΠΈ zf, sf, ΠΈ pf, Ρ‡Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ состояниС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±ΠΈΡ‚ΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° Π±Π΅Π· измСнСния ΠΈΡ… ΡΠΎΡΡ‚ояния.

not ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ — опСрация логичСского отрицания. Команда выполняСт поразрядноС ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (Π·Π°ΠΌΠ΅Π½Ρƒ значСния Π½Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅) ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π±ΠΈΡ‚Π° ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ записываСтся Π½Π° ΠΌΠ΅ΡΡ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ логичСского слоТСния Π΄Π²ΡƒΡ… ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡ‚Π½Ρ‹Ρ… чисСл.

model small

.stack 100h

.data

x1 db 0c2h

x2 db 022h

y db ?

.code

start:

mov ax,@data

mov ds, ax

mov al, x1

or al, x2

mov y, al

mov ax, 4c00h

int 21h

end start

АрифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ Ρ†Π΅Π»Ρ‹ΠΌΠΈ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΌΠΈ числами

Π‘Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… чисСл Π±Π΅Π· Π·Π½Π°ΠΊΠ°

inc ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ — опСрация ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ увСличСния значСния ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° Π½Π° 1;

inc ax; ax:=ax+1

inc x1

add ΠΎΠΏ1, ΠΎΠΏ2 — ΠΊΠΎΠΌΠ°Π½Π΄Π° слоТСния с ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠΌ дСйствия: ΠΎΠΏ1 = ΠΎΠΏ1 + ΠΎΠΏ2 (addition)

add al, bl

add ax, 0fe2h

add ebx, x1+2

add x1, 0fh

add x2, ax

adc ΠΎΠΏ1, ΠΎΠΏ2 — ΠΊΠΎΠΌΠ°Π½Π΄Π° слоТСния с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Ρ„Π»Π°Π³Π° пСрСноса cf. ΠΎΠΏ1 = ΠΎΠΏ1 + ΠΎΠΏ2 + Π·Π½Π°Ρ‡_cf

Π’Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… чисСл Π±Π΅Π· Π·Π½Π°ΠΊΠ°

dec ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ — опСрация Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ значСния ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° Π½Π° 1;

dec cx ;cx:=cx-1

dec x

sub ΠΎΠΏΠ΅Ρ€Π°Π½Π΄1, ΠΎΠΏΠ΅Ρ€Π°Π½Π΄2 — ΠΊΠΎΠΌΠ°Π½Π΄Π° вычитания; Π΅Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ дСйствия:

ΠΎΠΏΠ΅Ρ€Π°Π½Π΄1 = ΠΎΠΏΠ΅Ρ€Π°Π½Π΄1 — ΠΎΠΏΠ΅Ρ€Π°Π½Π΄2

sub al, bl; al:=al-bl

sub ax, x1

sub x2, dx

sub eax, 0f35h

sub x2, 22h

sbb ΠΎΠΏΠ΅Ρ€Π°Π½Π΄1, ΠΎΠΏΠ΅Ρ€Π°Π½Π΄2 — ΠΊΠΎΠΌΠ°Π½Π΄Π° вычитания с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Π·Π°Π΅ΠΌΠ° (Ρ„Π»Π°Π³Π° cf):

ΠΎΠΏΠ΅Ρ€Π°Π½Π΄1 = ΠΎΠΏΠ΅Ρ€Π°Π½Π΄1 — ΠΎΠΏΠ΅Ρ€Π°Π½Π΄2 — Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅_cf

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ слоТСния Π΄Π²ΡƒΡ… ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡ‚Π½Ρ‹Ρ… чисСл.

model small

.stack 100h

.data

x1 db 0c2h

x2 db 022h

y db ?

.code

start:

mov ax,@data

mov ds, ax

mov al, x1

add al, x2

mov y, al

mov ax, 4c00h

int 21h

end start

Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… чисСл

mul ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ1 — опСрация умноТСния Π΄Π²ΡƒΡ… Ρ†Π΅Π»Ρ‹Ρ… чисСл Π±Π΅Π· ΡƒΡ‡Π΅Ρ‚Π° Π·Π½Π°ΠΊΠ°

Алгоритм Ρ€Π°Π±ΠΎΡ‚Ρ‹:

Команда выполняСт ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² Π±Π΅Π· ΡƒΡ‡Π΅Ρ‚Π° Π·Π½Π°ΠΊΠΎΠ². Алгоритм зависит ΠΎΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ явного указания мСстополоТСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ сомноТитСля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ располоТСн Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ ΠΈΠ»ΠΈ Π² Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π΅. ΠœΠ΅ΡΡ‚ΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ сомноТитСля фиксировано ΠΈ Π·Π°Π²ΠΈΡΠΈΡ‚ ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ сомноТитСля

mul dl; ax:=al*dl, dlΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ1, alΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ2

mul x1; dx: ax=ax*0ad91h, x1 wordΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ1, axΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ2

mul ecx; edx: eax=eax*ecx, ecxΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ1, eaxΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ2

imul ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ1 — опСрация умноТСния Π΄Π²ΡƒΡ… цСлочислСнных Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ со Π·Π½Π°ΠΊΠΎΠΌ

Π”Π΅Π»Π΅Π½ΠΈΠ΅ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… чисСл

div Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ — Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ дСлСния Π΄Π²ΡƒΡ… Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

Алгоритм Ρ€Π°Π±ΠΎΡ‚Ρ‹:

Для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π΄Π°Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² — Π΄Π΅Π»ΠΈΠΌΠΎΠ³ΠΎ ΠΈ Π΄Π΅Π»ΠΈΡ‚Сля. Π”Π΅Π»ΠΈΠΌΠΎΠ΅ задаСтся нСявно ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΅Π³ΠΎ зависит ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° дСлитСля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ указываСтся Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅

div dl ;ah:al=ax/dl, axΠ΄Π΅Π»ΠΈΠΌΠΎΠ΅, dlΠ΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ, ah-частноС, alостаток

div x1 ;ax:dx=dx:ax/0ad91h, dx: axΠ΄Π΅Π»ΠΈΠΌΠΎΠ΅, x1 wordΠ΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ, ax-частноС,

;dxостаток

div ecx ;eax:edx=edx:eax/ecx, edx: eaxΠ΄Π΅Π»ΠΈΠΌΠΎΠ΅, ecxΠ΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ, eax-частноС,

;edxостаток

idiv Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ — опСрация дСлСния Π΄Π²ΡƒΡ… Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ со Π·Π½Π°ΠΊΠΎΠΌ

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ умноТСния Π΄Π²ΡƒΡ… ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡ‚Π½Ρ‹Ρ… чисСл.

model small

.stack 100h

.data

x1 db 78

yl db ?

yh db ?

.code

start:

mov ax,@data

mov ds, ax

xor ax, ax

mov al, 25

mul x1

jnc m1 ;Ссли Π½Π΅Ρ‚ пСрСполнСния

mov yh, ah

m1:

mov yl, al

mov ax, 4c00h

int 21h

end start

ΠŸΡ€ΠΈΠΌΠ΅Ρ€. ВычислитС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρƒ=(Ρ…2-Ρ…3)/Ρ…1, Ρ…1, Ρ…2,Ρ…3 — ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡ‚Π½Ρ‹Π΅ числа

model small

.stack 100h

.data

s1 db 'Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ…1', 10,13,'$'

s2 db 'Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ…2', 10,13,'$'

s3 db 'Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ…3', 10,13,'$'

x1 db ?

x2 db ?

yc db? ;частноС

yo db? ;остаток

.code

start:

mov ax,@data

mov ds, ax

mov ah, 09h

mov dx, offset s1

int 21h ;Π²Ρ‹Π²ΠΎΠ΄ строки

mov ah, 01h Π²Π²ΠΎΠ΄ΠΈΠΌ Ρ…1

int 21h ;Π²Π²ΠΎΠ΄ΠΈΠΌ число

sub al, 30h ;al:=x1

mov x1, al

mov ah, 09h

mov dx, offset s2

int 21h

mov ah, 01h Π²Π²ΠΎΠ΄ΠΈΠΌ Ρ…2

int 21h

sub al, 30h ;al:=x2

mov x2, al

mov ah, 09h

mov dx, offset s3

int 21h

mov ah, 01h Π²Π²ΠΎΠ΄ΠΈΠΌ Ρ…3

int 21h

sub al, 30h ;al:=x3

mov bl, x2 ;bl:=x2

sub bl, al ;bl:=x2-x3

xchg al, bl ;al:=bl, al:=x2-x3

xor ah, ah ;ax:=x2-x3 вычисляСм Ρƒ

mov dl, x1 ;dl:=x1

div dl ;ax/dl, ax/x1

mov yc, ah

mov yo, al

; ΠΌΠΎΠΆΠ½ΠΎ вывСсти Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π° ΡΠΊΡ€Π°Π½

mov ax, 4c00h

int 21h

end start

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ сдвига

ВсС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ сдвига ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ манипуляции Π½Π°Π΄ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π±ΠΈΡ‚Π°ΠΌΠΈ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ², ΠΎΠ½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ Π±ΠΈΡ‚Ρ‹ Π² ΠΏΠΎΠ»Π΅ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° Π²Π»Π΅Π²ΠΎ ΠΈΠ»ΠΈ Π²ΠΏΡ€Π°Π²ΠΎ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ ΠΊΠΎΠ΄Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

ВсС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ сдвига ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ Ρ„Π»Π°Π³ пСрСноса cf.

shl ΠΎΠΏΠ΅Ρ€Π°Π½Π΄, счСтчик_сдвигов (Shift Logical Left) — логичСский сдвиг Π²Π»Π΅Π²ΠΎ. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° сдвигаСтся Π²Π»Π΅Π²ΠΎ Π½Π° ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π±ΠΈΡ‚ΠΎΠ², опрСдСляСмоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ счСтчик_сдвигов. Π‘ΠΏΡ€Π°Π²Π° (Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ младшСго Π±ΠΈΡ‚Π°) Π²ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π½ΡƒΠ»ΠΈ;

shr ΠΎΠΏΠ΅Ρ€Π°Π½Π΄, счСтчик_сдвигов — логичСский сдвиг Π²ΠΏΡ€Π°Π²ΠΎ.

Алгоритм Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄:

Β· ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ «Π²Ρ‹Π΄Π²ΠΈΠ³Π°Π΅ΠΌΡ‹ΠΉ» Π±ΠΈΡ‚ устанавливаСт Ρ„Π»Π°Π³ cf;

Β· Π±ΠΈΡ‚, Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ Π² ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ с Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ†Π°, ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0;

Β· ΠΏΡ€ΠΈ сдвигС ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ Π±ΠΈΡ‚Π° ΠΎΠ½ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π²ΠΎ Ρ„Π»Π°Π³ cf, ΠΏΡ€ΠΈ этом Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ сдвинутого Π±ΠΈΡ‚Π° тСряСтся!

sal ΠΎΠΏΠ΅Ρ€Π°Π½Π΄, счСтчик_сдвигов (Shift Arithmetic Left)

sar ΠΎΠΏΠ΅Ρ€Π°Π½Π΄, счСтчик_сдвигов

арифмСтичСский сдвиг Π²Π»Π΅Π²ΠΎ/Π²ΠΏΡ€Π°Π²ΠΎ. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° сдвигаСтся Π²Π»Π΅Π²ΠΎ/ Π²ΠΏΡ€Π°Π²ΠΎ Π½Π° ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π±ΠΈΡ‚ΠΎΠ², опрСдСляСмоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ счСтчик_сдвигов. Π‘ΠΏΡ€Π°Π²Π°/ Π‘Π»Π΅Π²Π° Π² ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ Π²ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π½ΡƒΠ»ΠΈ.

Команда sal Π½Π΅ ΡΠΎΡ…раняСт Π·Π½Π°ΠΊΠ°, Π½ΠΎ устанавливаСт Ρ„Π»Π°Π³ cf Π² ΡΠ»ΡƒΡ‡Π°Π΅ смСны Π·Π½Π°ΠΊΠ° ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½Ρ‹ΠΌ Π²Ρ‹Π΄Π²ΠΈΠ³Π°Π΅ΠΌΡ‹ΠΌ Π±ΠΈΡ‚ΠΎΠΌ. Π’ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π° sal ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π΅ shl;

Команда sar сохраняСт Π·Π½Π°ΠΊ, восстанавливая Π΅Π³ΠΎ послС сдвига ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ Π±ΠΈΡ‚Π°.

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ цикличСского сдвига

rol ΠΎΠΏΠ΅Ρ€Π°Π½Π΄,счСтчик_сдвигов (Rotate Left) — цикличСский сдвиг Π²Π»Π΅Π²ΠΎ.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° сдвигаСтся Π²Π»Π΅Π²ΠΎ Π½Π° ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π±ΠΈΡ‚, опрСдСляСмоС ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠΌ счСтчик_сдвигов. Π‘Π΄Π²ΠΈΠ³Π°Π΅ΠΌΡ‹Π΅ Π²Π»Π΅Π²ΠΎ Π±ΠΈΡ‚Ρ‹ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ справа.

ror ΠΎΠΏΠ΅Ρ€Π°Π½Π΄, счСтчик_сдвигов (Rotate Right) — цикличСский сдвиг Π²ΠΏΡ€Π°Π²ΠΎ.

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· Ρ€ΠΈΡ., ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ простого цикличСского сдвига Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ своСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ дСйствиС, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ: цикличСски сдвигаСмый Π±ΠΈΡ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ вдвигаСтся Π² ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ с Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ†Π°, Π½ΠΎ ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ„Π»Π°Π³Π° cf.

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ цикличСского сдвига Ρ‡Π΅Ρ€Π΅Π· Ρ„Π»Π°Π³ пСрСноса cf ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄ простого цикличСского сдвига Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ сдвигаСмый Π±ΠΈΡ‚ Π½Π΅ ΡΡ€Π°Π·Ρƒ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ с Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π΅Π³ΠΎ ΠΊΠΎΠ½Ρ†Π°, Π° Π·Π°ΠΏΠΈΡΡ‹Π²Π°Π΅Ρ‚ся сначала Π² Ρ„Π»Π°Π³ пСрСноса cf. Π›ΠΈΡˆΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ исполнСниС Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ сдвига (ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° выполняСтся Π² Ρ†ΠΈΠΊΠ»Π΅) ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΈΡŽ Π²Ρ‹Π΄Π²ΠΈΠ½ΡƒΡ‚ΠΎΠ³ΠΎ Ρ€Π°Π½Π΅Π΅ Π±ΠΈΡ‚Π° с Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ†Π° ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° (см. Ρ€ΠΈΡ. 4).

rcl ΠΎΠΏΠ΅Ρ€Π°Π½Π΄, счСтчик_сдвигов (Rotate through Carry Left) — цикличСский сдвиг Π²Π»Π΅Π²ΠΎ Ρ‡Π΅Ρ€Π΅Π· пСрСнос.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° сдвигаСтся Π²Π»Π΅Π²ΠΎ Π½Π° ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π±ΠΈΡ‚, опрСдСляСмоС ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠΌ счСтчик_сдвигов. Π‘Π΄Π²ΠΈΠ³Π°Π΅ΠΌΡ‹Π΅ Π±ΠΈΡ‚Ρ‹ ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ становятся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ„Π»Π°Π³Π° пСрСноса cf.

rcr ΠΎΠΏΠ΅Ρ€Π°Π½Π΄, счСтчик_сдвигов (Rotate through Carry Right) — цикличСский сдвиг Π²ΠΏΡ€Π°Π²ΠΎ Ρ‡Π΅Ρ€Π΅Π· пСрСнос.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° сдвигаСтся Π²ΠΏΡ€Π°Π²ΠΎ Π½Π° ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π±ΠΈΡ‚, опрСдСляСмоС ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠΌ счСтчик_сдвигов. Π‘Π΄Π²ΠΈΠ³Π°Π΅ΠΌΡ‹Π΅ Π±ΠΈΡ‚Ρ‹ ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ становятся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ„Π»Π°Π³Π° пСрСноса cf.

Из Ρ€ΠΈΡ. 4 Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ сдвигС Ρ‡Π΅Ρ€Π΅Π· Ρ„Π»Π°Π³ пСрСноса появляСтся ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ элСмСнт, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ, Π² Ρ‡Π°ΡΡ‚ности, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρƒ цикличСски сдвигаСмых Π±ΠΈΡ‚ΠΎΠ², Π² Ρ‡Π°ΡΡ‚ности, рассогласованиС Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ.

Под рассогласованиСм Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ здСсь ΠΈ Π΄Π°Π»Π΅Π΅ подразумСваСтся дСйствиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ позволяСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ участки этой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΡ… Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅ мСсто ΠŸΡ€ΠΈΠΌΠ΅Ρ€. Π”Π°Π½ΠΎ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число. Π’Ρ‹Π²Π΅Π΄ΠΈΡ‚Π΅ Π½Π° ΡΠΊΡ€Π°Π½ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π½Π° 2.

Π›ΡŽΠ±ΠΎΠ΅ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число хранится Π² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅

— 1 ffh

— 2 feh

— 10 f6h

ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ числа ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ, ΠΌΠΎΠΆΠ½ΠΎ осущСствив логичСскоС ΠΎΡ‚Ρ€ΠΈΡ†Π°Π½ΠΈΠ΅ Π½Π°Π΄ числом ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ² 1.

model small

.stack 100h

.data

x db -12

.code

start:

mov ax,@data

mov ds,ax

mov al, x ;Π² al ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число

not al

inc al ;число ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ

shr al, 1

;Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π° ΡΠΊΡ€Π°Π½

aam ;

;ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ числа мСньшСго 63h (9910), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ находится Π² al Π² Π΅Π³ΠΎ ;Π½Π΅ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½Ρ‹ΠΉ BCD-эквивалСнт

; -Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ рСгистра al Π½Π° 10;

; -Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ частноС Π² Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ ah, остаток — Π² Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ al.

mov dx, ax ;число Π² Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ dx

or dx, 3030h ;ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ ASCII ΠΊΠΎΠ΄ числа

xchg dh, dl ;мСняю мСстами ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ ΠΈ ΠΌΠ»Π°Π΄ΡˆΠΈΠΉ Π±Π°ΠΉΡ‚, для Π²Ρ‹Π²ΠΎΠ΄Π° символа ΠΈΠ· dl

mov ah, 02h ;

int 21h ;Π²Ρ‹Π²ΠΎΠΆΡƒ ΡΡ‚Π°Ρ€ΡˆΡƒΡŽ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ΠΊΡƒ числа

xchg dh, dl ;мСняю мСстами ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ ΠΈ ΠΌΠ»Π°Π΄ΡˆΠΈΠΉ Π±Π°ΠΉΡ‚,

int 21h ;Π²Ρ‹Π²ΠΎΠΆΡƒ ΠΌΠ»Π°Π΄ΡˆΡƒΡŽ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ΠΊΡƒ числа

mov ax, 4c00h

int 21h

end start

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ управлСния

По ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ дСйствия, ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ микропроцСссора, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Ρ‚Ρ€ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹:

1. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ бСзусловной ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ управлСния:

— ΠΊΠΎΠΌΠ°Π½Π΄Π° бСзусловного ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°; jmp

— Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΈΠ· ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹; call, ret

— Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ. Int, iret

2. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ условной ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ управлСния:

— ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΏΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ сравнСния cmp;

— ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΏΠΎ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ„Π»Π°Π³Π°;

— ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΏΠΎ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠΌΡƒ рСгистра ecx/cx.

3. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ управлСния Ρ†ΠΈΠΊΠ»ΠΎΠΌ:

— ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° со ΡΡ‡Π΅Ρ‚Ρ‡ΠΈΠΊΠΎΠΌ ecx/cx;

— ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° со ΡΡ‡Π΅Ρ‚Ρ‡ΠΈΠΊΠΎΠΌ ecx/cx с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ досрочного Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° ΠΏΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ.

jmp адрСс_ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° — бСзусловный ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π±Π΅Π· сохранСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ‚ΠΎΡ‡ΠΊΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°. Аналог goto.

jmp m1 m4:

… …

m1: jmp m4

УсловныС ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ условного ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ синтаксис:

jcc ΠΌΠ΅Ρ‚ΠΊΠ°_ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°

МнСмокод всСх ΠΊΠΎΠΌΠ°Π½Π΄ начинаСтся с «j» — ΠΎΡ‚ ΡΠ»ΠΎΠ²Π° jump (ΠΏΡ€Ρ‹ΠΆΠΎΠΊ), cc — опрСдСляСт ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ условиС, Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ. Π§Ρ‚ΠΎ касаСтся ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° ΠΌΠ΅Ρ‚ΠΊΠ°_ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°, Ρ‚ΠΎ ΡΡ‚Π° ΠΌΠ΅Ρ‚ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ находится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ сСгмСнта ΠΊΠΎΠ΄Π°, мСТсСгмСнтная ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° управлСния Π² ΡƒΡΠ»ΠΎΠ²Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°Ρ… Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°Π΅Ρ‚ся.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΡƒΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ условного ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°, ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ сформировано условиС, Π½Π° ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ управлСния. Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠ°ΠΌΠΈ Ρ‚Π°ΠΊΠΎΠ³ΠΎ условия ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ:

— Π»ΡŽΠ±Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰Π°Ρ состояниС арифмСтичСских Ρ„Π»Π°Π³ΠΎΠ²;

— ΠΊΠΎΠΌΠ°Π½Π΄Π° сравнСния cmp, ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‰Π°Ρ значСния Π΄Π²ΡƒΡ… ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ²;

— ΡΠΎΡΡ‚ояниС рСгистра ecx/cx.

УсловныС ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ ΠΏΠΎ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠΌΡƒ Ρ„Π»Π°Π³ΠΎΠ²

НазваниС Ρ„Π»Π°Π³Π°

НомСр Π±ΠΈΡ‚Π° Π² eflags/flag

Команда условного ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„Π»Π°Π³Π° для осущСствлСния ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°

Π€Π»Π°Π³ пСрСноса cf

1

jc

cf = 1

Π€Π»Π°Π³ чСтности pf

2

jp

pf = 1

Π€Π»Π°Π³ нуля zf

6

jz

zf = 1

Π€Π»Π°Π³ Π·Π½Π°ΠΊΠ° sf

7

js

sf = 1

Π€Π»Π°Π³ пСрСполнСния of

11

jo

of = 1

Π€Π»Π°Π³ пСрСноса cf

1

jnc

cf = 0

Π€Π»Π°Π³ чСтности pf

2

jnp

pf = 0

Π€Π»Π°Π³ нуля zf

6

jnz

zf = 0

Π€Π»Π°Π³ Π·Π½Π°ΠΊΠ° sf

7

jns

sf = 0

Π€Π»Π°Π³ пСрСполнСния of

11

jno

of = 0

jcxz ΠΌΠ΅Ρ‚ΠΊΠ°_ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° (Jump if cx is Zero) — ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄, Ссли cx Π½ΠΎΠ»ΡŒ;

jecxz ΠΌΠ΅Ρ‚ΠΊΠ°_ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° (Jump Equal ecx Zero) — ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄, Ссли ecx ноль.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹: ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅, Ρ€Π°Π²Π½Ρ‹ Π»ΠΈ Π΄Π²Π° числа Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹.

model small

.stack 100h

.data

s1 db 'числа Ρ€Π°Π²Π½Ρ‹$'

s2 db 'числа Π½Π΅ Ρ€Π°Π²Π½Ρ‹$'

.code

start:

mov ax,@data

mov ds, ax

mov ah, 01h

int 21h ;Π²Π²Π΅Π»ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ число

mov dl, al

mov ah, 01h

int 21h ;Π²Π²Π΅Π»ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ число

sub al, dl ;сравнили числа

jnz m1

mov dx, offset s1

jmp m2

m1: mov dx, offset s2

m2: mov ah, 09h

int 21h ;Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ строку

mov ax, 4c00h

int 21h

end start

Команда сравнСния cmp

cmp ΠΎΠΏΠ΅Ρ€Π°Π½Π΄1, ΠΎΠΏΠ΅Ρ€Π°Π½Π΄2 — сравниваСт Π΄Π²Π° ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° ΠΈ ΠΏΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ сравнСния устанавливаСт Ρ„Π»Π°Π³ΠΈ. Команда сравнСния cmp ΠΈΠΌΠ΅Π΅Ρ‚ интСрСсный ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹. Он Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ вычитания sub. ЕдинствСнноС, Ρ‡Π΅Π³ΠΎ ΠΎΠ½Π° Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ — это запись Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° вычитания Π½Π° ΠΌΠ΅ΡΡ‚ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°.

Алгоритм Ρ€Π°Π±ΠΎΡ‚Ρ‹:

— Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ (ΠΎΠΏΠ΅Ρ€Π°Π½Π΄1-ΠΎΠΏΠ΅Ρ€Π°Π½Π΄2);

— Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ„Π»Π°Π³ΠΈ, ΠΎΠΏΠ΅Ρ€Π°Π½Π΄1 ΠΈ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄2 Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π΅ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒ).

УсловныС ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ послС ΠΊΠΎΠΌΠ°Π½Π΄ сравнСния

Π’ΠΈΠΏΡ‹ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ²

МнСмокод ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ условного ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°

ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ условного ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°

ЗначСния Ρ„Π»Π°Π³ΠΎΠ² для осщСствлСния ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°

Π›ΡŽΠ±Ρ‹Π΅

je

ΠΎΠΏΠ΅Ρ€Π°Π½Π΄1 = ΠΎΠΏΠ΅Ρ€Π°Π½Π΄2

zf = 1

Π›ΡŽΠ±Ρ‹Π΅

jne

ΠΎΠΏΠ΅Ρ€Π°Π½Π΄1<>ΠΎΠΏΠ΅Ρ€Π°Π½Π΄2

zf = 0

Π‘ΠΎ Π·Π½Π°ΠΊΠΎΠΌ

jl/jnge

ΠΎΠΏΠ΅Ρ€Π°Π½Π΄1 < ΠΎΠΏΠ΅Ρ€Π°Π½Π΄2

sf <> of

Π‘ΠΎ Π·Π½Π°ΠΊΠΎΠΌ

jle/jng

ΠΎΠΏΠ΅Ρ€Π°Π½Π΄1 <= ΠΎΠΏΠ΅Ρ€Π°Π½Π΄2

sf <> of or zf = 1

Π‘ΠΎ Π·Π½Π°ΠΊΠΎΠΌ

jg/jnle

ΠΎΠΏΠ΅Ρ€Π°Π½Π΄1 > ΠΎΠΏΠ΅Ρ€Π°Π½Π΄2

sf = of and zf = 0

Π‘ΠΎ Π·Π½Π°ΠΊΠΎΠΌ

jge/jnl

ΠΎΠΏΠ΅Ρ€Π°Π½Π΄1 => ΠΎΠΏΠ΅Ρ€Π°Π½Π΄2

sf = of

Π‘Π΅Π· Π·Π½Π°ΠΊΠ°

jb/jnae

ΠΎΠΏΠ΅Ρ€Π°Π½Π΄1 < ΠΎΠΏΠ΅Ρ€Π°Π½Π΄2

cf = 1

Π‘Π΅Π· Π·Π½Π°ΠΊΠ°

jbe/jna

ΠΎΠΏΠ΅Ρ€Π°Π½Π΄1 <= ΠΎΠΏΠ΅Ρ€Π°Π½Π΄2

cf = 1 or zf=1

Π‘Π΅Π· Π·Π½Π°ΠΊΠ°

ja/jnbe

ΠΎΠΏΠ΅Ρ€Π°Π½Π΄1 > ΠΎΠΏΠ΅Ρ€Π°Π½Π΄2

cf = 0 and zf = 0

Π‘Π΅Π· Π·Π½Π°ΠΊΠ°

jae/jnb

ΠΎΠΏΠ΅Ρ€Π°Π½Π΄1 => ΠΎΠΏΠ΅Ρ€Π°Π½Π΄2

cf = 0

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹: ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅, Ρ€Π°Π²Π½Ρ‹ Π»ΠΈ Π΄Π²Π° числа Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹.

model small

.stack 100h

.data

s1 db 'числа Ρ€Π°Π²Π½Ρ‹$'

s2 db 'числа Π½Π΅ Ρ€Π°Π²Π½Ρ‹$'

.code

start:

mov ax,@data

mov ds, ax

mov ah, 01h

int 21h ;Π²Π²Π΅Π»ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ число

mov dl, al

mov ah, 01h

int 21h ;Π²Π²Π΅Π»ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ число

cmp al, dl ;сравнили числа

jne m1

mov dx, offset s1

jmp m2

m1: mov dx, offset s2

m2: mov ah, 09h

int 21h ;Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ строку

mov ax, 4c00h

int 21h

end start

ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ Ρ†ΠΈΠΊΠ»ΠΎΠ²

loop ΠΌΠ΅Ρ‚ΠΊΠ°_ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° (Loop) — ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ»

Π Π°Π±ΠΎΡ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… дСйствий:

— Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° рСгистра ecx/cx;

— ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡ рСгистра ecx/cx с Π½ΡƒΠ»Π΅ΠΌ:

— Π΅ΡΠ»ΠΈ (ecx/cx) > 0, Ρ‚ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ пСрСдаСтся Π½Π° ΠΌΠ΅Ρ‚ΠΊΡƒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°;

— Π΅ΡΠ»ΠΈ (ecx/cx) = 0, Ρ‚ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ пСрСдаСтся Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ послС loop ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ

mov cx, количСство Ρ†ΠΈΠΊΠ»ΠΎΠ²

ΠΌ1: Ρ‚Π΅Π»ΠΎ Ρ†ΠΈΠΊΠ»Π°

loop m1

loope/loopz ΠΌΠ΅Ρ‚ΠΊΠ°_ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° (Loop till cx <> 0 or Zero Flag = 0) — ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ», ΠΏΠΎΠΊΠ° cx <> 0 ΠΈΠ»ΠΈ zf = 0.

loopne/loopnz ΠΌΠ΅Ρ‚ΠΊΠ°_ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° (Loop till cx <> 0 or Not Zero flag=0) — ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ» ΠΏΠΎΠΊΠ° cx <> 0 ΠΈΠ»ΠΈ zf = 1

НСдостаток ΠΊΠΎΠΌΠ°Π½Π΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° loop, loope/loopz ΠΈ loopne/loopnz Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ (ΠΎΡ‚ -128 Π΄ΠΎ +127 Π±Π°ΠΉΡ‚).

ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»ΠΎΠ²

mov cΡ…,n ; Π² ΡΡ… Π·Π°Π½ΠΎΡΠΈΠΌ количСство ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ внСшнСго Ρ†ΠΈΠΊΠ»Π°

m1:

push cx

mov cx,n1; Π² ΡΡ… Π·Π°Π½ΠΎΡΠΈΠΌ количСство ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π°

m2:

Ρ‚Π΅Π»ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π°

loop m2

pop cx

loop m1

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹: ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ подсчСта Ρƒ=1+2+3+…+n, n Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 10 000.

model small

.stack 100h

.data

yb dd ?

ym dw ?

s1 db 'Π²Π²Π΅Π΄ΠΈΡ‚Π΅ n', 10,13,'$'

.code

start:

mov ax,@data

mov ds, ax

mov dx, offset s1

mov ah, 09h

int 21h

mov cx, 3

m: shl bx, 4

mov ah, 01h

int 21h Π²Π²ΠΎΠ΄ΠΈΠΌ n Π² Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ bx

sub ax, 130h

add bx, ax

loop m

mov cx, bx

xor dx, dx

xor al, al

m1: add dx, cx ΡΡ‡ΠΈΡ‚Π°Π΅ΠΌ Ρƒ

jnc m2

mov al, 1

m2: loop m1

cmp al, 1

je m3

mov ym, dx

m3: mov yb, edx

mov ax, 4c00h

int 21h

end start

Π¦Π΅ΠΏΠΎΡ‡Π΅Ρ‡Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

(ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ строк символов)

Π¦Π΅ΠΏΠΎΡ‡ΠΊΠ° — это ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ элСмСнтов, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π±Π°ΠΉΡ‚, слово, Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ слово. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ этих элСмСнтов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ любоС — символы, числа.

Π’ ΡΠΈΡΡ‚Π΅ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ микропроцСссора имССтся сСмь ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ-ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ.

КаТдая ΠΈΠ· Π½ΠΈΡ… рСализуСтся Π² ΠΌΠΈΠΊΡ€ΠΎΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π΅ трСмя ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ, Π² ΡΠ²ΠΎΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, каТдая ΠΈΠ· ΡΡ‚ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ элСмСнта — Π±Π°ΠΉΡ‚ΠΎΠΌ, словом ΠΈΠ»ΠΈ Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌ словом.

ВмСстС с Ρ†Π΅ΠΏΠΎΡ‡Π΅Ρ‡Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ прСфиксы ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ставятся ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Π² ΠΏΠΎΠ»Π΅ [ΠΌΠ΅Ρ‚ΠΊΠΈ]. ЦСпочСчная ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±Π΅Π· прСфикса выполняСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. Π‘ ΠΏΡ€Π΅Ρ„иксом Ρ†Π΅ΠΏΠΎΡ‡Π΅Ρ‡Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Ρ†ΠΈΠΊΠ»ΠΈΡ‡Π½ΠΎ.

rep (REPeat) — ΠΊΠΎΠΌΠ°Π½Π΄Π° выполняСтся, ΠΏΠΎΠΊΠ° содСрТимоС Π² ecx/cx Π½Π΅ ΡΡ‚Π°Π½Π΅Ρ‚ Ρ€Π°Π²Π½Ρ‹ΠΌ 0. ΠŸΡ€ΠΈ этом цСпочСчная ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ стоит прСфикс, автоматичСски ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ содСрТимоС ecx/cx Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ. Π’Π° ΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°, Π½ΠΎ Π±Π΅Π· прСфикса, этого Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚.

repe ΠΈΠ»ΠΈ repz (REPeat while Equal or Zero) — ΠΊΠΎΠΌΠ°Π½Π΄Π° выполняСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° содСрТимоС ecx/cx Π½Π΅ Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ ΠΈΠ»ΠΈ Ρ„Π»Π°Π³ zf Ρ€Π°Π²Π΅Π½ 1. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡΡ‚ΠΈΡ… условий Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ΡΡ, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ пСрСдаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

repne ΠΈΠ»ΠΈ repnz (REPeat while Not Equal or Zero) — ΠΊΠΎΠΌΠ°Π½Π΄Π° цикличСски выполняСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° содСрТимоС ecx/cx Π½Π΅ Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ ΠΈΠ»ΠΈ Ρ„Π»Π°Π³ zf Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ. ΠŸΡ€ΠΈ Π½Π΅Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΡ‚ΠΈΡ… условий Ρ€Π°Π±ΠΎΡ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ прСкращаСтся.

Ѐормирования физичСского адрСса ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² адрСс_источника ΠΈ Π°Π΄Ρ€Π΅Ρ_ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ° происходит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

адрСс_источника — ΠΏΠ°Ρ€Π° ds:esi/si;

адрСс_ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ° — ΠΏΠ°Ρ€Π° es:edi/di

Π’Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΠΉΡΡ всСх Ρ†Π΅ΠΏΠΎΡ‡Π΅Ρ‡Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄, — это Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ. Π•ΡΡ‚ΡŒ Π΄Π²Π΅ возмоТности:

— ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ ΠΊ Π΅Π΅ ΠΊΠΎΠ½Ρ†Ρƒ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ возрастания адрСсов;

— ΠΎΡ‚ ΠΊΠΎΠ½Ρ†Π° Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ ΠΊ Π½Π°Ρ‡Π°Π»Ρƒ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ убывания адрСсов.

Π¦Π΅ΠΏΠΎΡ‡Π΅Ρ‡Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ сами Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ рСгистров, Π°Π΄Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹, обСспСчивая Ρ‚Π΅ΠΌ самым автоматичСскоС ΠΏΡ€ΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π±Π°ΠΉΡ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ эта модификация осущСствляСтся, опрСдСляСтся ΠΊΠΎΠ΄ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. А Π²ΠΎΡ‚ Π·Π½Π°ΠΊ этой ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ опрСдСляСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ„Π»Π°Π³Π° направлСния df (Direction Flag) Π² Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π΅ eflags/flags. БостояниСм Ρ„Π»Π°Π³Π° df ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π²ΡƒΡ… ΠΊΠΎΠΌΠ°Π½Π΄, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ²:

cld (Clear Direction Flag) — ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Ρ„Π»Π°Π³ направлСния df = 0, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ индСксных рСгистров esi/si ΠΈ edi/di Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ (опСрация ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°) Ρ†Π΅ΠΏΠΎΡ‡Π΅Ρ‡Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ Π² Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ возрастания адрСсов;

std (Set Direction Flag) — ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ„Π»Π°Π³ направлСния df = 1, Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ индСксных рСгистров esi/si ΠΈ edi/di Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒΡΡ (опСрация Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°) Ρ†Π΅ΠΏΠΎΡ‡Π΅Ρ‡Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ΄Ρ‚ΠΈ Π² Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ убывания адрСсов.

Π’ΠΈΠΏΠΎΠ²ΠΎΠΉ Π½Π°Π±ΠΎΡ€ дСйствий для выполнСния любой Ρ†Π΅ΠΏΠΎΡ‡Π΅Ρ‡Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

— Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„Π»Π°Π³Π° df Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π² ΠΊΠ°ΠΊΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ элСмСнты Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ — Π² Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ возрастания ΠΈΠ»ΠΈ убывания адрСсов.

— Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° Π°Π΄Ρ€Π΅ΡΠ° Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ Π² ΠΏΠ°Ρ€Ρ‹ рСгистров ds:(e)si ΠΈ es: (e)di.

— Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π² Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ ecx/cx количСство элСмСнтов, ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅.

— Π’Ρ‹Π΄Π°Ρ‚ΡŒ Ρ†Π΅ΠΏΠΎΡ‡Π΅Ρ‡Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ с ΠΏΡ€Π΅Ρ„иксом ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ.

ΠŸΠ΅Ρ€Π΅ΡΡ‹Π»ΠΊΠ° Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ

movs адрСс_ΠΏΡ€ΠΈΠ΅ΠΌ, адрСс_источника (MOVe String) — ΠΏΠ΅Ρ€Π΅ΡΠ»Π°Ρ‚ΡŒ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ;

movsb MOVe String Byte) — ΠΏΠ΅Ρ€Π΅ΡΠ»Π°Ρ‚ΡŒ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ Π±Π°ΠΉΡ‚;

movsw (MOVe String Word) — ΠΏΠ΅Ρ€Π΅ΡΠ»Π°Ρ‚ΡŒ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ слов;

movsd (MOVe String Double word) — ΠΏΠ΅Ρ€Π΅ΡΠ»Π°Ρ‚ΡŒ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… слов.

Команда ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Π±Π°ΠΉΡ‚, слово ΠΈΠ»ΠΈ Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ слово ΠΈΠ· Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ источника, Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ°. Π Π°Π·ΠΌΠ΅Ρ€ пСрСсылаСмых элСмСнтов ассСмблСр опрСдСляСт, исходя ΠΈΠ· Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ². К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Ссли эти ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π±Ρ‹Π»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ db, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π±ΡƒΠ΄ΡƒΡ‚ Π±Π°ΠΉΡ‚Ρ‹, Ссли ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π±Ρ‹Π»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ dd, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΡΡ‹Π»ΠΊΠ΅ ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‚ Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ слова.

Для Ρ†Π΅ΠΏΠΎΡ‡Π΅Ρ‡Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ с ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°ΠΌΠΈ Ρ‚ΠΈΠΏΠ° movs адрСс_ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ°, адрСс_источника, Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ машинного Π°Π½Π°Π»ΠΎΠ³Π°. ΠŸΡ€ΠΈ трансляции Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² транслятор ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π΅Π΅ Π² ΠΎΠ΄Π½Ρƒ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄: movsb, movsw ΠΈΠ»ΠΈ movsd.

Π‘Π°ΠΌΠ° ΠΏΠΎ ΡΠ΅Π±Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° movs пСрСсылаСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ элСмСнт, исходя ΠΈΠ· Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ значСния рСгистров esi/si ΠΈ edi/di. Если ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ прСфикс rep, Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΡΠ»Π°Ρ‚ΡŒ Π΄ΠΎ 64 ΠšΠ±Π°ΠΉΡ‚ Π΄Π°Π½Π½Ρ‹Ρ…. Число пСрСсылаСмых элСмСнтов Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ΠΎ Π² счСтчик — рСгистр cx (use16) ΠΈΠ»ΠΈ ecx (use32).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³ΠΈ. ΠŸΠ΅Ρ€Π΅ΡΡ‹Π»ΠΊΠ° строк ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ movs

MODEL small

STACK 256

.data

source db 'ВСстируСмая строка','$' ;строка-источник

dest db 19 DUP (' ') ;строка-ΠΏΡ€ΠΈΡ‘ΠΌΠ½ΠΈΠΊ

.code

main:

mov ax,@data ;Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° сСгмСнтных рСгистров

mov ds, ax ;настройка рСгистров DS ΠΈ ES Π½Π° Π°Π΄Ρ€Π΅Ρ сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ…

mov es, ax

cld ;сброс Ρ„Π»Π°Π³Π° DF — ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° строки ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ

lea si, source ;Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π² si ΡΠΌΠ΅Ρ‰Π΅Π½ΠΈΡ строки-источника

lea di, dest ;Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π² DS смСщСния строки-ΠΏΡ€ΠΈΡ‘ΠΌΠ½ΠΈΠΊΠ°

mov cx, 20 ;для прСфикса rep — счСтчик ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ (Π΄Π»ΠΈΠ½Π° строки)

rep movs dest, source ;пСрСсылка строки

lea dx, dest

mov ah, 09h ;Π²Ρ‹Π²ΠΎΠ΄ Π½Π° ΡΠΊΡ€Π°Π½ строки-ΠΏΡ€ΠΈΡ‘ΠΌΠ½ΠΈΠΊΠ°

int 21h

mov ax, 4c00h

int 21h

end main

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ сравнСния Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ

cmps адрСс_ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ°, адрСс_источника(CoMPare String) — ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ строки;

cmpsb (CoMPare String Byte) — ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ строку Π±Π°ΠΉΡ‚;

cmpsw (CoMPare String Word) — ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ строку слов;

cmpsd (CoMPare String Double word) — ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ строку Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… слов.

Алгоритм Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ cmps Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ вычитания (элСмСнт Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ-источника — элСмСнт Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ-получатСля) Π½Π°Π΄ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½Ρ‹ΠΌΠΈ элСмСнтами ΠΎΠ±Π΅ΠΈΡ… Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ выполнСния вычитания ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ cmps Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ сравнСния cmp. Она, Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ cmp, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ элСмСнтов, Π½Π΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ ΠΏΡ€ΠΈ этом Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, ΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ Ρ„Π»Π°Π³ΠΈ zf, sf ΠΈ of.

ПослС выполнСния вычитания ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½Ρ‹Ρ… элСмСнтов Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ cmps, индСксныС рСгистры esi/si ΠΈ edi/di автоматичСски ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² ΡΠΎΠΎΡ‚вСтствии со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ„Π»Π°Π³Π° df Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ€Π°Π²Π½ΠΎΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ элСмСнта сравниваСмых Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ.

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ cmps Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ нСсколько Ρ€Π°Π·, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ сравнСниС элСмСнтов Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ cmps ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ прСфикс повторСния. Π‘ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ cmps ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ прСфикс повторСния repe/repz ΠΈΠ»ΠΈ repne/repnz:

— repe ΠΈΠ»ΠΈ repz — Ссли Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ сравнСниС Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π΄Π²ΡƒΡ… условий: достигнут ΠΊΠΎΠ½Π΅Ρ† Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ (содСрТимоС ecx/cx Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ) ΠΈΠ»ΠΈ Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ°Ρ… Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΠ»ΠΈΡΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ элСмСнты (Ρ„Π»Π°Π³ zf ΡΡ‚Π°Π» Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ);

— repne ΠΈΠ»ΠΈ repnz — Ссли Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ сравнСниС Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ°: Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ достигнут ΠΊΠΎΠ½Π΅Ρ† Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ (содСрТимоС ecx/cx Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ) ΠΈΠ»ΠΈ Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ°Ρ… Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΠ»ΠΈΡΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ элСмСнты (Ρ„Π»Π°Π³ zf ΡΡ‚Π°Π» Ρ€Π°Π²Π΅Π½ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… строк ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ cmps

MODEL small

STACK 256

.data

sov db 0ah, 0dh,'Π‘Ρ‚Ρ€ΠΎΠΊΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚.','$'

nesov db 0ah, 0dh,'Π‘Ρ‚Ρ€ΠΎΠΊΠΈ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚','$'

s1 db '123 456 789', 0ah, 0dh,'$';исслСдуСмыС строки

s2 db 10

s3 db 11 dup (0)

.code

main:

mov ax,@data ;Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° сСгмСнтных рСгистров

mov ds, ax

mov es, ax ;настройка ES Π½Π° DS

;Π²Π²ΠΎΠ΄ΠΈΠΌ строку

mov ah, 0Π°h

mov dx, offset s2

int 21h

;поиск ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΡ… элСмСнтов, сброс Ρ„Π»Π°Π³Π° DF — сравнСниС Π² Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ возрастания адрСсов

cld

lea si, s1 ;Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π² si ΡΠΌΠ΅Ρ‰Π΅Π½ΠΈΡ string1

lea di, s3 ;Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π² di ΡΠΌΠ΅Ρ‰Π΅Π½ΠΈΡ string2

mov cx, 10 ;Π΄Π»ΠΈΠ½Π° строки для прСфикса repe

repe cmpsb ;сравнСниС строк (ΠΏΠΎΠΊΠ° сравниваСмыС элСмСнты строк Ρ€Π°Π²Π½Ρ‹)

;Π²Ρ‹Ρ…ΠΎΠ΄ ΠΏΡ€ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π²ΡˆΠ΅Π³ΠΎ элСмСнта

jcxz equal ;cx=0, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ строки ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚

lea dx, nesov

jmp exit ;Π²Ρ‹Ρ…ΠΎΠ΄

equal: lea dx, sov

exit: mov ah, 09h

int 21h ;Π²Ρ‹Π²ΠΎΠ΄ сообщСния

mov ax, 4c00h

int 21h

end main ;ΠΊΠΎΠ½Π΅Ρ† ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ сканирования Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ

scas адрСс_ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ° (SCAning String) — ΡΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ;

scasb (SCAning String Byte) — ΡΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ Π±Π°ΠΉΡ‚;

scasw (SCAning String Word) — ΡΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ слов;

scasd (SCAning String Double Word) — ΡΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… слов

Π­Ρ‚ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ поиск искомого значСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ находится Π² Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π΅ al/ax/eax. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ поиска Ρ‚ΠΎΡ‚ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ сравнСния cmps, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ вычитания

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ