Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ругается на (asm) Mov result,SE: [2] - беру адрес COM порта [D5, Win2k]


Страницы:   1 2

Донской ©   (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]

В ОРЕШНИК!


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо