мета-данные страницы
  •  
Загрузка не удалась. Возможно, проблемы с правами доступа?

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
asm:second3 [03/03/2011 16:57] arabusovasm:second3 [26/02/2014 22:16] (текущий) arabusov
Строка 4: Строка 4:
 Данный способ передачи параметров используется в языках программирования Си, Си++, Пролог и других. Этот метод противопоставлен методу языка Паскаль, поэтому связка asm-pascal будет выглядеть по-другому! Данный способ передачи параметров используется в языках программирования Си, Си++, Пролог и других. Этот метод противопоставлен методу языка Паскаль, поэтому связка asm-pascal будет выглядеть по-другому!
  
-Итак, если мы определим функцию в Си<code=c>int foo (int a,int b,int c,int d)</code>то при вызове функции выполнятся следующие машинные инструкции:+Итак, если мы определим функцию в Си<code=c>int foo (int a,int b,int c,int d);</code>то при вызове функции выполнятся следующие машинные инструкции:
 <code=asm> push d <code=asm> push d
  push c  push c
  push b  push b
  push a  push a
- call foo+ call _foo
  add sp,8 ;Освобождение стека осуществляется автоматически!</code>  add sp,8 ;Освобождение стека осуществляется автоматически!</code>
 При этом для правильного использования переданных параметров процедура //foo// может выглядеть так: При этом для правильного использования переданных параметров процедура //foo// может выглядеть так:
Строка 20: Строка 20:
  b = [bp+6]  b = [bp+6]
  c = [bp+8]  c = [bp+8]
- d = [bp+ah]+ d = [bp+10]
  
  ...  ...
Строка 30: Строка 30:
  
  
-==== Пример библиотеки, позволяющей вывести символ на экран ====+==== Пример библиотеки, которая выводит символ на экран ====
  
 Модуль Assembler Модуль Assembler
Строка 106: Строка 106:
 <code=c>extern int put_symbol (unsigned char symbol, unsigned char attribut);</code> <code=c>extern int put_symbol (unsigned char symbol, unsigned char attribut);</code>
 Это значит, что передаваемые параметры начинались с адреса bp+4 Это значит, что передаваемые параметры начинались с адреса bp+4
 +==== Альтернативный вариант написания процедур на ассемблере ====
 +Во многих ассемблерах (в том числе и TASM) встроена поддержка передачи параметров с использованием директивы //ARG// или усложнённой директивы //proc//
 +
 +Пример:
 +<code=asm>_foo proc C, a: word, b: word, c: word, d: word
 +
 + ...
 +
 + ret
 +
 +_foo endp</code>
 +В данном методе нельзя использовать регистр BP!