CodeNet / Языки программирования / Ассемблер / СПРАВОЧНИК по системе программирования ТУРБО АССЕМБЛЕР 2.0
СПРАВОЧНИК по системе программирования ТУРБО АССЕМБЛЕР 2.0
Регистр CS
-----------------------------------------------------------------
Регистр CS указывает на начало блока памяти объемом 64К, или
сегмент кода, в котором находится следующая выполняемая инструк-
ция. Следующая инструкция, которую нужно выполнить, находится по
смещению, определяемому в сегменте кода регистром IP, то есть на
нее указывает адрес (в форме "сегмент:смещение") CS:IP. Процессор
8086 никогда не может извлечь инструкцию из сегмента, отличного
от того, который определяется регистром CS.
Регистр CS можно изменять с помощью многих инструкций, вклю-
чая отдельные инструкции перехода, вызовы и возвраты управления.
Ни при каких обстоятельствах регистр CS нельзя загрузить непос-
редственно.
Никакие другие режимы адресации или указатели памяти, отлич-
ные от IP, не могут нормально работать относительно регистра CS.
Регистр DS
-----------------------------------------------------------------
Регистр DS указывает на начало сегмента данных, которые
представляет собой блок памяти объемом 64К, в котором находится
большинство размещенных в памяти операндов. Обычно для ссылки на
адреса памяти используются смещения, предполагающие использование
регистров BX, SI или DI. В основном сегмент данных представляет
собой то, о чем говорит его название: как правило это сегмент, в
котором находится текущий набор данных. Адресация памяти обсужда-
ется далее, в Главе 5 "Основные элементы программы на языке Ас-
семблера".
Регистр ES
-----------------------------------------------------------------
Регистр ES указывает на начало блока памяти объемом 64К, ко-
торый называется дополнительным сегментом. Как и подразумевает
его название, дополнительный сегмент не служит для какой-то конк-
ретной цели, но доступен тогда, когда в нем возникает необходи-
мость. Иногда дополнительный сегмент используется для выделения
дополнительного блока памяти объемом 64К для данных. Однако дос-
туп к памяти в дополнительном сегменте менее эффективен, чем дос-
туп к памяти в сегменте данных (см. Главу 10 "Развитое программи-
рование на Турбо Ассемблере").
Особенно полезен дополнительный сегмент, когда используются
строковые инструкции. Все строковые инструкции, которые выполняют
запись в память, используют в качестве адреса памяти, в которую
нужно выполнить запись, пару регистров ES:DI. Это означает, что
регистр ES особенно полезен при использовании его в качестве це-
левого сегмента при копировании блоков, сравнении строк, просмот-
ре памяти и очистке блоков памяти. Мы рассмотрим строковые инст-
рукции и использование в связи с ними регистра ES в Главе 5 "Бо-
лее подробно о программировании на Турбо Ассемблере".
Регистр SS
-----------------------------------------------------------------
Регистр SS указывает на начало сегмента стека, которые
представляет собой блок памяти объемом 64К, в котором находится
стек. Все инструкции, которые неявно используют регистр SP (вклю-
чая занесение в стек, извлечение из стека, вызовы и возвраты уп-
равления), работают с сегментом стека, так как только регистр SP
может использоваться для адресации памяти в сегменте стека.
Как мы обсуждали ранее, регистр BP также работает относи-
тельно сегмента стека. Это позволяет использовать регистр BP для
доступа к параметрам и переменным, которые хранятся в стеке. Од-
нако более подробно адресацию к памяти мы обсудим в следующей
главе.
Набор инструкций процессора 8086
-----------------------------------------------------------------
Для программиста ключевым ресурсом процессора 8086 является
набор инструкций. Как мы уже обсуждали ранее, набор инструкций
включает в себя все действия, которые программист может заставить
выполнить процессор 8086. Полный набор инструкций Турбо Ассембле-
ра приведен в Таблице 4.1.
Как можно заметить, в наборе инструкций процессора 8086 име-
ется множество инструкций. Эти инструкции выполняют множество
действий, от пустой операции, которая не выполняет никаких функ-
ций (NOP), до копирования 65535 байт (REP MOVSB). Подробному ос-
вещению набора инструкций мы уделим много времени в других гла-
вах.
Набор инструкций Турбо Ассемблера
Таблица 4.1
-----------------------------------------------------------------
Инструкция Процессор Инструкция Процессор
-----------------------------------------------------------------
ADD все SAL все
OR все SHL все
ADC все SAR все
SBB все SHR все
AND все RCL все
SUB все RCR все
XOR все AAA все
CMP все AAS все
XCHG все CBW все
TEST все CWDE 386
MOV все (1) CLC все
ESC все CLD все
JMP все CLI все
CALL все CMC все
INT все CMPSB все
INC все CMPSW все
DEC все CMPSD 386
PUSH все CWD все
POP все CDQ 386
AAD все (2) DAA все
AAM все (2) DAS все
IN все HLT все
OUT все INTO все
LEA все IRET все
LDS все IRETD 386
LES все LAHF все
LSS 386 LODSB все
LFS 386 LODSW все
LGS 386 LODSD 386
DIV все MOVSB все
MUL все MOVSW все
IDIV все MOVSD 386
IMUL все (3) NOP все
NEG все POPF все
NOT все POPFD 386
ROL все PUSHF все
ROR все PUSHFD 386
SAHF все REPE все
SCASB все REPZ все
SCASW все REPNE все
SCASD 386 REPNZ все
STC все SEGCS все (4)
STD все SEGSD все (5)
STI все SEGSS все (6)
STOSB все SEGES все (7)
STOSW все SEGFS 386 (8)
STOSD 386 SEGGS 386 (9)
WAIT все RET все
XLATB все RETN все (10)
STOS все RETF все (11)
SCAS все JA все (12)
LODS все JNBE все (12)
XLAT все JAE все (12)
MOVS все JNB все (12)
CMPS все JNK все (12)
PUSHA 186-386 JB все (12)
PUSHAD 386 JNAE все (12)
POPA 186-386 JC все (12)
POPAD 386 JBE все (12)
LEAVE 186-386 JNA все (12)
INSB 186-386 JE все (12)
INSD 386 JG все (12)
OUTSB 186-386 JNLE все (12)
OUTSW 186-386 JGE все (12)
OUTSD 386 JNL все (12)
INS 186-386 JL все (12)
OUTS 186-386 JNGE все (12)
BOUND 186-386 JLE все (12)
ENTER 186-386 JNG все (12)
LOCK все JNE все (12)
REP все JNZ все (12)
JNO все (12) SETA 386
JNS все (12) SETAE 386
JNP все (12) SETB 386
JPO все (12) SETBE 386
JO все (12) SETC 386
JP все (12) SETE 386
JPE все (12) SETG 386
JS все (12) SETGE 386
LOOP все (13) SETL 386
LOOPE все (14) SETLE 386
LOOPZ все (14) SETNA 386
LOOPNE все (14) SETNAE 386
LOOPNZ все (14) SETNB 386
LOOPW все (15) SETNB 386
LOOPWE все (16) SETNC 386
LOOPWZ все (16) SETNE 386
LOOPWNE все (16) SETNG 386
LOOPWNZ все (16) SETNGE 386
LOOPD 386 (17) SETNL 386
LOOPDE 386 (17) SETNLE 386
LOOPDZ 386 (17) SETNO 386
LOOPDNE 386 (17) SETNP 386
LOOPDNZ 386 (17) SETNS 386
JCXZ все (18) SETNZ 386
JECXZ 386 (19) SETO 386
BT 386 SETP 386
BTC 386 SETPE 386
BTR 386 SETS 386
BTS 386 SETZ 386
BSF 386
BSR 386 APPL 286p+386p
MOVSX 386 CLTS 286p+386p
MOVZX 386 LLDT 286p+386p
SHLD 386 LMSW 286p+386p
SHRD 386 LTR 286p+386p
SLDT 286p+386p FXAM 8087-387
SMSW 286p+386p FXTRACT 8087-387
STR 286p+386p FXAM 8087-387
VERR 286p+386p FXTRACT 8087-387
VERW 286p+386p FYL2X 8087-387
LGDT 286p+386p FYL2XP1 8087-387
LIDT 286p+386p FNCLEX 8087-387
SGDT 286p+386p FNDISI 8087-387
SIDT 286p+386p FNENI 8087-387
LAR 286p+386p FNINIT 8087-387
LSL 286p+386p FADDP 8087-387
FMULP 8087-387 FDIVP 8087-387
FADD 8087-387 FDIVRP 8087-387
FDIV 8087-387 FSUBP 8087-387
FDIVR 8087-387 FSUBRP 8087-387
FMUL 8087-387 FXCH 8087-387
FSUB 8087-387 FCOMPP 8087-387
FCOM 8087-387 FFREE 8087-387
FCOM 8087-387 FIADD 8087-387
FCOMP 8087-387 FICOM 8087-387
FST 8087-387 FICOMP 8087-387
F2XM1 8087-387 FIDIV 8087-387
FABS 8087-387 FIDIVR 8087-387
FCHS 8087-387 FIMUL 8087-387
FCLEX 8087-387 FIST 8087-387
FDECSTP 8087-387 FISUB 8087-387
FDISI 8087-387 FISUBR 8087-387
FENI 8087-387 FLDCW 8087-387
FINCSTP 8087-387 FSTCW 8087-387
FINIT 8087-387 FSTSW 8087-387
FLD1 8087-387 FNSTCW 8087-387
FLDL2E 8087-387 FNSTSW 8087-387
FLDL2T 8087-387 FLDENV 8087-387
FLDLG2 8087-387 FRSTOR 8087-387
FLDLN2 8087-387 FSAVE 8087-387
FLDPI 8087-387 FSTENV 8087-387
FLDZ 8087-387 FNSAVE 8087-387
FNOP 8087-387 FNSTENV 8087-387
FPATAN 8087-387 FLD 8087-387
FPREM 8087-387 FSTP 8087-387
FPTAN 8087-387 FILD 8087-387
FRNDINT 8087-387 FISTP 8087-387
FSCALE 8087-387 FBLD 8087-387
FSQRT 8087-387 FBSTP 8087-387
FIST 8087-387 FWAIT 8087-387
-----------------------------------------------------------------
(1) - реализована на процессоре 386 с использованием специальных
регистров;
(2) - за инструкцией может следовать любое 8-битовое непосредст-
венное значение х (по умолчанию 10);
(3) - расширения процессора 286;
(4) - генерирует переопределение CS, может следовать за инструк-
цией;
(5) - генерирует переопределение DS, может следовать за инструк-
цией;
(6) - генерирует переопределение SS, может следовать за инструк-
цией;
(7) - генерирует переопределение ES, может следовать за инструк-
цией;
(8) - генерирует переопределение FS, может следовать за инструк-
цией;
(9) - генерирует переопределение GS, может следовать за инструк-
цией;
(10) - явный возврат управления ближнего типа;
(11) - явный возврат управления дальнего типа;
(12) - при переходах воспринимает аргумент ближнего или дальнего
типа;
(13) - размер операнда в операторе цикла определяется размером
сегмента;
(14) - аналогично LOOP;
(15) - размер операнда в цикле всегда равен слову (CX);
(16) - аналогично LOOPW;
(17) - размер операнда в цикле всегда равен двойному слову (ECX);
(18) - размер операнда в JCXZ равен слову (CX);
(19) - размер операнда в JECXZ равен двойному слову (ECX).
