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

Это старая версия документа!


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

Модуль 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