мета-данные страницы
Загрузка не удалась. Возможно, проблемы с правами доступа?
Различия
Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
| asm:second1 [03/02/2011 09:46] – создано arabusov | asm:second1 [10/02/2011 22:46] (текущий) – arabusov | ||
|---|---|---|---|
| Строка 3: | Строка 3: | ||
| ===== Адресация переменных ===== | ===== Адресация переменных ===== | ||
| - | В общем случае адрес переменной или команды можно представить с помощью выражения вида < | + | В общем случае адрес переменной или команды можно представить с помощью выражения вида < |
| Пример: | Пример: | ||
| Определим массив переменных greet | Определим массив переменных greet | ||
| - | < | + | < |
| _DATA segment word public " | _DATA segment word public " | ||
| Строка 16: | Строка 16: | ||
| </ | </ | ||
| и инициализируем ds указанием на сегмент данных | и инициализируем ds указанием на сегмент данных | ||
| - | < | + | < |
| _CODE segment word public " | _CODE segment word public " | ||
| Строка 23: | Строка 23: | ||
| </ | </ | ||
| - | В результате выполнения следующих последовательностей команд в регистре al окажется символ ' | + | В результате выполнения следующих последовательностей команд в регистре al окажется символ ' |
| - | - < | + | mov bh,0 |
| + | int 10h</ | ||
| + | - < | ||
| mov al,' | mov al,' | ||
| </ | </ | ||
| - | - < | + | - < |
| + | - <code asm>mov si, (offset greet) + 4 | ||
| + | mov al, | ||
| + | - <code asm>mov bx, offset greet + 4 | ||
| + | mov al, | ||
| + | - <code asm>mov bx,offset greet | ||
| + | mov si,4 | ||
| + | mov al,[bx + si]</ | ||
| + | В примерах со второго по пятый в al помещался 5-й символ массива greet, в первом в al помещался символ ' | ||
| + | |||
| + | ===== Гибридное программирование ===== | ||
| + | Итак, пусть у нас есть программа, | ||
| + | ==== Идентификаторы ==== | ||
| + | === Си -> Ассемблер === | ||
| + | Для того, чтобы процедуре были доступны переменные и функции программы, | ||
| + | === Ассемблер -> Си === | ||
| + | Для того, чтобы программе были доступны переменные, | ||
| + | ==== Аргументы и результаты функций ==== | ||
| + | В данном разделе кратко опишем стандарт Си-функций. | ||
| + | === Результат === | ||
| + | Результаты функций остаются в регистрах (один байт в AL, два байта в AX, три и четыре байта (кроме float) в DX-AX, более 4-х байт в сегменте данных с указателем в AX, результат типа double и float в верхушке стека сопроцессора). | ||
| + | === Аргументы === | ||
| + | Аргументы функции указываются в стеке процессора, | ||
| + | ==== Примеры ==== | ||
| + | Модуль Си:< | ||
| + | extern int Fun (void); | ||
| + | int main () | ||
| + | { | ||
| + | | ||
| + | | ||
| + | }</ | ||
| + | Модуль Ассемблер:< | ||
| + | PUBLIC _Fun | ||
| + | .CODE | ||
| + | _Fun PROC NEAR | ||
| + | MOV AX,13 | ||
| + | RET | ||
| + | _Fun ENDP | ||
| + | END</ | ||
| + | Для компиляции программы необходимо: | ||
| + | - скомпилировать ассемблерный модуль в объектный с опцией /mx | ||
| + | - в IDE Turbo C v2.0 создать проект, | ||
| + | === Последовательность действий для сборки гибридной программы === | ||
| + | tasm // | ||
| + | |||
| + | tc | ||
| + | |||
| + | **Project -> Project Name** // | ||
| + | |||
| + | **Compile -> Make** | ||
| + | |||
| + | **File -> OS Shell** //if no errors// | ||
| + | |||
| + | // | ||
| + | === Содержимое файла project.prj==== | ||
| + | < | ||
| + | c_module.c</ | ||