Пример библиотеки, позволяющей вывести символ на экран

Модуль Assembler

.MODEL small _WIDTH equ 25 L_1 equ 80 L_0 equ 40 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