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


          

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


Ассемблер для 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.

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