    mov	ax,word ptr [bp+6]	;Присвоить параметр функции регистру ах 
    mov	word ptr [si],ax	;Присвоить ах члену объекта х 
    pop	si	;Восстановить si 
    pop	bp	;Восстановить bp 
    ret	;Вернуться в место вызова 

    Использование версии 4 5 даст аналогичные результаты  Как обычно, в 
инструкциях регистр bp запоминается в стеке, после чего он устанавливается 
равным стековому указателю sp для адресации значений в стеке, в данном случае 
параметра int n (строка 19 в листинге 173)  После сохранения регистра si в 
программе с помощью bp регистр si устанавливается равным указателю this  
передаваемому всем нестатическим функциям-членам класса   Указатель this 
ссылается на объект, для которого в операторе вызывалась нестатическая 
функция-член, в данном случае на объект q, объявленный в функции main() в 
строке 12  После инициализации регистра si значением this в программе 
регистру ах присваивается значение [Ьр+6], которое ссылается на параметр n  
Затем в программе это значение присваивается по адресу word ptr [si], 
ссылающемуся на первое слово объекта q (адресованному регистром si)   Наконец, 
в программе перед возвратом из функции восстанавливаются регистры si и bp 
    Нелишним будет напоминание о том, что нестатические функции-члены класса 
получают указатель this на объект, для которого в операторе вызывались эти 
функции В программах на ассемблере вы можете воспользоваться указателем this 
для определения местоположения объекта в памяти 

    Написание встраиваемого кода BASM 

    Теперь, после исследования нескольких примеров программ на 
ассемблере, можно начинать думать о написании своих программ  Вы можете 
действовать двумя способами   Первый заключается в использовании 
встроенного ассемблера (BASM) для вставки встраиваемых ассемблерных 
операторов в текст вашей программы 
    Второй состоит в написании внешних модулей для их отдельного 
ассемблирования в объектные файлы с помощью TASM и последующей компоновки 
вместе с вашей скомпилированной программой   В этом разделе поясняется работа 
с BASM   Это самый простой способ совместного использования ассемблера с программами, 
написанными на С и С++.
    Несмотря на впечатляющую легкость использования,  в  BASM  отсуствуют
некоторые  расширенные свойства TASM.

   •  Отсутствуют макросы.
   •  Нельзя ассемблировать специфические для процессоров 80386 н 80486 инструкции.
   •  Не распознается идеальный режим — расширенный ассемблерный синтаксис TASM 
   •  Имеется ограниченный набор ассемблерных директив для резервирования памяти.

    Если вы не можете обойтись без этих средств, следует воспользоваться 
автономным ассемблером TASM Однако имейте в виду, что вы можете воспользоваться 
компиляторами С и C++ для выхода из большинства ситуаций в которых  необходимы 
автономные ассемблерные программы с расширенным набором команд TASM.
Например, наверное лучше резервировать пространство для переменных с помощью 
объявлений С и C++, на которые затем можно ссылаться по именам в ассемблерных 
операторах. Однако, если вам нужны инструкции 80386  или вы предпочитаете пользоваться 
идеальным режимом, следует использовать TASM.

ПРЕДУПРЕЖДЕНИЕ

    Если в ваших ассемблерных вставках используются инструкции 80186 или 80286, при 
компиляции с помощью BCC используйте опцией -1.  Если же в ваших операторах используются 
инструкции защищенного режима 80286, воспользуйтесь опцией -2.


      Написание операторов asm

    Операторы asm исполняют один или несколько байтов инструкций процессора 
непосредственно в скомпилированную программу. Следует полъзоваться операторами asm 
для вставки небольших участков ассемблерного кода, например для оптимизации  ключевых 
операторов или для доступа к регистрам компьютера  Общий вид оператора asm следующий:

    asm мнемоника [операнды] [;]

   Первым идет ключевое слово asm за ним следует оператор ассемблера (мнемоника), 
подобный mov или shl. Затем следуют операнды, например одно или несколько имен регистров 
или адрес для ссылки  Завершает оператор необязательный символ точки с запятой. Оператор 
может также завершаться символом новой строки. В отличие от языка автономного ассемблера, 
точка с запятой не начинает комментарий. Например, в модуле TASM следующий оператор 
завершается комментарием:

    mov ax, cx  ; Задать ax  значение  cx
    
    
    Глава 17. Оптнмшгирш с мшвщмо ассемблера	443 