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



       

ГЛАВА 21. Компановка программ - часть 15


Ассемблер для IBM PC. Глава 21 15

шест.5720 байт памяти - более 20К. Компилирующие языки обычно генерируют объектные коды значительно превышающие по объему размеры компилируемой программы.

КОМПАНОВКА ПРОГРАММ НА ЯЗЫКЕ C И АССЕМБЛЕРЕ ------------------------------------------------------------

Трудность описания связи программ на языке C и ассемблерных программ состоит в том, что различные версии языка C имеют разные соглашения о связях и для более точной информации следует пользоваться руководством по имеющейся версии языка C. Здесь приведем лишь некоторые соображения, представляющие интерес:

ъ Большинство версий языка C обеспечивают передачу параметров через стек в обратной (по сравнению с другими языками) последовательности. Обычно доступ, например, к двум параметрам, передаваемым через стек, осуществляется следующим образом:

MOV ES,BP MOV BP,SP MOV DH,[BP+4] MOV DL,[BP+6] ... POP BP RET

ъ Некоторые версии языка C различают прописные и строчные буквы, поэтому имя ассемблерного модуля должно быть представленно в том же символьном регистре, какой используют для ссылки C-программы.

ъ В некоторых версиях языка C требуется, чтобы ассемб лерные программы, изменяющие регистры DI и SI, записы вали их содержимое в стек при входе и восстанавливали эти значения из стека при выходе.

ъ Ассемблерные программы должны возвращать значения, если это необходимо, в регистре AX (одно слово) или в регистровой паре DX:AX (два слова).

ъ Для некоторых версий языка C, если ассемблерная программа устанавливает флаг DF, то она должна сбросить его командой CLD перед возвратом.

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

ъ В основной программе, вызывающей подпрограмму, необходимо определять точку входа как EXTRN, а в подпрограмме - как PUBLIC.

Ассемблер для IBM PC. Глава 21 16

ъ Будьте внимательны при использовании рекурсий, когда подпрограмма 1 вызывает подпрограмму 2, которая в свою очередь вызывает подпрограмму 1.

ъ Если кодовые сегменты необходимо скомпановать в один сегмент, то необходимо определить их с одинаковыми именами, одинаковыми классами и атрибутом PUBLIC.




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