Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Assembler > Функции на асме


Автор: zlelik 29.10.01, 11:43
m3_readyC PROC
PUBLIC m3_readyC
mov dx, PORTO
mov al, C0
out dx, al
mov dx, PORTI
in al, dx
and ax, 30h
ret
m3_readyC ENDP
какое "число" возвращает эта функция? То что в регистре ax или нет?

Автор: devilray 29.10.01, 14:53
Ну раз уж ты делаешь in al,dx то результат должен быть в al

Автор: Jin X 29.10.01, 16:16
"Возвращаться" будет всё, что есть... Вопрос в том, что будет использовать программа после вызова этой процедуры...
А что касается "высоких" языков, то там используются определённые регистры: Pascal, например, использует AX для типа Word/Integer или DX:AX для Longint/Pointer, а в ASтMе - это уж у кого насколько фантазии хватит :)
В данной случае, скорее всего, как сказал Devilray, нужно использовать AX (или AL, т.к. AH будет = 0).

Автор: zlelik 29.10.01, 17:31
Так значит в ах?
может это важно, что эта функция должна использоваться в С++ коде.

Автор: server_mouse 31.10.01, 12:14
(в С++)
Всё зависит о типа:
BYTE -- AL;
WORD -- AX;
DWORD -- EAX для 386+;
для древних процов не знаю.
void* -- EAX; любой указатель. Опять таки для 386+;
Кроме того из С можно получить доступ к регистрам процессара. См. _AL, _AX, _BX и т.д.

Автор: server_mouse 31.10.01, 12:21
Да, double возвращается через регистр сопроцессора.
И фраза '386+' подразумевает не только проц, но и 32-разрядную ось. Принципиально ты можешь возвращать через EAX, но DOS вроде такого не понимает... Проверить надо.
Всё вышесказаное справедливо для __cdecl.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)