Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.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. |