Передача параметров


Из программ, вызывающих подпрограммы (которые называют вызы-вающими программами или вызывающим кодом), подпрограммам часто передается информация. Например, в примере программы предыдущего раздела для передачи в подпрограмму PrintString использовался ре-гистр BX. Это действие называется передачей параметров. При этом параметры указывают подпрограмме, что нужно сделать.

Существует два общепринятых способа передачи параметров: в регистрах и в стеке. Передача параметров через регистры часто ис-пользуется в чистом коде Ассемблера, а передача через стек ис-пользуется в большинстве языков высокого уровня, включая Паскаль и Си, и в подпрограммах на Ассемблере, вызываемых из этих языков.

Передача параметров в регистрах очень проста. Для этого нуж-но просто поместить значения-параметры в соответствующие регистры и вызвать подпрограмму. Каждая подпрограмма может иметь свои собственные потребности в параметрах, хотя вы вероятно поймете, что чтобы избежать путаницы, лучше выработать некоторые соглаше-ния и придерживаться их. Например, вы можете следовать правилу, согласно которому первый параметр-указатель всегда передается в регистре BX, второй — в SI и т.д. Если вы используете для переда-чи параметров регистры, аккуратно комментируйте каждую подпрог-рамму — какие параметры она получает и в каких регистрах они должны находиться.

Передача параметров в стеке несколько более сложна и отлича-ется значительно меньшей гибкостью, чем передача их через регист-ры. Если вы решили использовать передачу параметров через стек, вы вероятно будете использовать соглашения, принятые в предпочи-таемом вами языке высокого уровня. Это позволит легко компоновать подпрограммы на Ассемблере с программами, написанными на данном языке. В соответствующих главах и приложениях данного руководства приводится полное описание соглашений по передаче параметров в Турбо Си, Турбо Паскале, Турбо Бейсике и Турбо Прологе, и приве-дены примеры на Ассемблере.

Загрузка...