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).