мета-данные страницы
Это старая версия документа!
Пример библиотеки, позволяющей вывести символ на экран
Модуль Assembler
.MODEL small public _put_symbol extrn _cursor, _type_crt, _mode .CODE _put_symbol proc near cli push bp mov bp,sp mov cx,_type_crt cmp cx,0 je _monocrome mov dx,0b800h jmp _continue _monocrome: mov dx,0b000h _continue: mov es,dx mov bx,_cursor shl bx,1 mov al,[bp+4] mov ah,[bp+6] mov es:[bx],ax pop bp mov ax,0 sti ret _put_symbol endp end
Заголовочный файл для предыдущего модуля
/* Хидерный файл контроллера Motorola 6845 */ char type_crt = 1; /* Тип монитора. 0 - MDA, 1 - CGA, EGA e t.c.*/ unsigned char mode = 03; /* Режим, очевидно */ extern unsigned int cursor = 0; /* Позиция курсора в линейном режиме */ extern unsigned char attribut = 7; /* Его атрибут */ extern int put_symbol (unsigned char symbol, unsigned char attribut);
Обратите внимание на эти строки:
_put_symbol proc near push bp mov bp,sp ... mov al,[bp+4] mov ah,[bp+6] ... pop bp _put_symbol endp
Это - передача параметров процедуре ассемблера без использования директивы ARG.
В модуле языка Си записано следующее:
extern int put_symbol (unsigned char symbol, unsigned char attribut);
Это значит, что передаваемые параметры начинались с адреса bp+4