![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ругается на (asm) Mov result,SE: [2] - беру адрес COM порта [D5, Win2k]
Донской © (2003-11-17 19:27:00)
День добрый!
В строке с восклицательными знаками компилятор Delphi выдает сообщение "Operand Size Mismatch"
Я уже какие только типы переменых не задавал....
function GetBaseAddress(Num:byte):Word;
var b:word;
d:word;
begin
num:=(num-1)*2;
b:=$400;
asm
push edx
push eax
MOV AX,0 //ES указывает на область данных в BIOS
MOV ES,AX
!!! mov result,ES:[b+num] //получаем базовый адрес COM
pop eax
pop edx
end;
end;
Владислав (2003-11-17 19:54:00) [21]
> Донской © (17.11.03 19:38) [4]
Прикалываешься? :)
Если результат DWORD, то юзай dword ptr :)
Донской (2003-11-17 19:38:00) [22]
И так ругается
function TDirectPort.GetBaseAddress(Num:byte):dWord;
var b:word;
d:word;
begin
num:=(num-1)*2;
b:=$400;
//result:=$3f8;
asm
push edx
push eax
MOV AX,0
MOV ES,AX
mov word ptr result,ES:[b+num]
pop eax
pop edx
end;
end;
Владислав (2003-11-17 19:34:00) [23]
Меня бы смутило то, что адрес 4 байта, а WORD всего 2, но это твои "проблемы".
push edx
push eax
Это излешне...
Юзай word ptr.
Донской (2003-11-17 19:33:00) [24]
Содержательно.
А поподробнее?
VMcL (2003-11-17 19:32:00) [25]
В ОРЕШНИК!