Автор
|
Тема: Функции на асме
|
zlelik |
опубликован 29-10-2001 14:43 MSK
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-2001 17:53 MSK
Ну раз уж ты делаешь in al,dx то результат должен быть в al |
7in
|
опубликован 29-10-2001 19:16 MSK
"Возвращаться" будет всё, что есть... Вопрос в том, что будет использовать программа после вызова этой процедуры...А что касается "высоких" языков, то там используются определённые регистры: Pascal, например, использует AX для типа Word/Integer или DX:AX для Longint/Pointer, а в ASтMе - это уж у кого насколько фантазии хватит :) В данной случае, скорее всего, как сказал Devilray, нужно использовать AX (или AL, т.к. AH будет = 0). |
zlelik
|
опубликован 29-10-2001 20:31 MSK
Так значит в ах? может это важно, что эта функция должна использоваться в С++ коде.
|
server_mouse
|
опубликован 31-10-2001 15:14 MSK
(в С++) Всё зависит о типа: BYTE -- AL; WORD -- AX; DWORD -- EAX для 386+; для древних процов не знаю. void* -- EAX; любой указатель. Опять таки для 386+;Кроме того из С можно получить доступ к регистрам процессара. См. _AL, _AX, _BX и т.д.
|
server_mouse
|
опубликован 31-10-2001 15:21 MSK
Да, double возвращается через регистр сопроцессора. И фраза '386+' подразумевает не только проц, но и 32-разрядную ось. Принципиально ты можешь возвращать через EAX, но DOS вроде такого не понимает... Проверить надо.Всё вышесказаное справедливо для __cdecl. |