Ассемблер и программирование для IBM PC



       

ГЛАВА 3. Требования языка ассемблер - часть 8


Рис. 3.2. обобщает предыдущие сведения в простой исходной программе на ассемблере. Программа содержит сегмент стека - STACKSG и сегмент кода - CODESG. STACKSG содержит один элемент DB (определить байт), который определяет 12 копий слова 'STACKSEG'. В последующих программах стек не опpеделяется таким способом, но при использовании отладчика для просмотра ассемблированной программы на экране, данное определение помогает локализо вать стек. CODESG содержит выполняемые команды программы, хотя первая директива ASSUME не генерирует кода. Директива ASSUME назначает регистр SS для STACKSG и регистр CS для CODESG. В действительности, эта директива сообщает ассемблеру, что для адресации в STACKSG необходимо использовать адрес в регистре SS и для адресации в CODESG - адрес в регистре CS. Системный загрузчик при загрузке программы с диска в память для выполнения устанавливает действительные адреса в регистрах SS и CS. Программа не имеет сегмента данных, так как в ней нет определения данных и, соответственно, в ASSUME нет необходимости ассигновать pегистр DS.

Ассемблер для IBM PC. Глава 3 68

Команды, следующие за ASSUME - PUSH, SUB и PUSH выполняют стандартные действия для инициализации стека текущим адресом в регистре DS и нулевым адресом. Поскольку, обычно, программа выполняется из DOS, то эти команды обеспечивают возврат в DOS после завершения программы. (Можно также выполнить программу из отладчика, хотя это особый случай). Последующие команды выполняют те же действия, что показаны на pис.2.1 в предыдущей главе, когда рассматривался отладчик.

ОСНОВНЫЕ ПОЛОЖЕНИЯ НА ПАМЯТЬ ------------------------------------------------------------

ъ Не забывайте ставить символ "точка с запятой" перед комментариями.

ъ Завершайте каждый сегмент директивой ENDS, каждую процедуру - директивой ENDP, а программу - директивой END.

ъ В директиве ASSUME устанавливайте соответствия между сегментными регистрами и именами сегментов.

ъ Для EXE-программ (но не для COM-программ, см. гл.6) обеспечивайте не менее 32 слов для стека, соблюдайте соглашения по инициализации стека командами PUSH, SUB и PUSH и заносите в регистр DS адрес сегмента данных.

ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ ------------------------------------------------------------

3.1. Какие команды заставляют ассемблер печатать заголовок в начале каждой страницы листинга и делать прогон листа?

3.2. Какие из следующих имен неправильны: а) PC_AT, б) $50, в) @$_Z, г) 34B7, д) AX?

3.3. Какое назначение каждого из трех сегментов, описанных в этой главе?

3.4. Что конкретно подразумевает директива END, если она завершает а) программу, б) процедуру, в) сегмент?

3.5. Укажите различия между директивой и командой.

3.6. Укажите различия в назначении RET и END.

3.7. Для сегментов кода, данных и стека даны имена CDSEG, DATSEG и STKSEG соответственно. Сформируйте директиву ASSUME.

3.8. Напишите три команды для инициализации стека адресом в DS и нулевым адресом.

Ассемблер для IBM PC. Глава 4 79




    Содержание  Назад  Вперед