Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.137.170.183] |
|
Сообщ.
#1
,
|
|
|
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 или нет? |
Сообщ.
#2
,
|
|
|
Ну раз уж ты делаешь in al,dx то результат должен быть в al
|
Сообщ.
#3
,
|
|
|
"Возвращаться" будет всё, что есть... Вопрос в том, что будет использовать программа после вызова этой процедуры...
А что касается "высоких" языков, то там используются определённые регистры: Pascal, например, использует AX для типа Word/Integer или DX:AX для Longint/Pointer, а в ASтMе - это уж у кого насколько фантазии хватит В данной случае, скорее всего, как сказал Devilray, нужно использовать AX (или AL, т.к. AH будет = 0). |
Сообщ.
#4
,
|
|
|
Так значит в ах?
может это важно, что эта функция должна использоваться в С++ коде. |
Сообщ.
#5
,
|
|
|
(в С++)
Всё зависит о типа: BYTE -- AL; WORD -- AX; DWORD -- EAX для 386+; для древних процов не знаю. void* -- EAX; любой указатель. Опять таки для 386+; Кроме того из С можно получить доступ к регистрам процессара. См. _AL, _AX, _BX и т.д. |
Сообщ.
#6
,
|
|
|
Да, double возвращается через регистр сопроцессора.
И фраза '386+' подразумевает не только проц, но и 32-разрядную ось. Принципиально ты можешь возвращать через EAX, но DOS вроде такого не понимает... Проверить надо. Всё вышесказаное справедливо для __cdecl. |