![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка в ассемблере [D5, Win95/98]
sammy © (2002-04-28 11:21:00)получаю 4 ошибки в следующем коде
(ошибка типа invalid register combination)
function TForm1.GetComAvailable: byte; assembler;
const
BiosSeg = $0040;
DPMIInt = $31;
SegSel = $02;
Com1Off = 0;
Com2Off = 2;
Com3Off = 4;
Com4Off = 6;
asm
push es
mov ax,SegSel
mov bx,BiosSeg
int DPMIInt
mov dx,0
jc @Error
mov es,ax
mov di,0
cmp di,es:[di+Com4Off] //ошибка
rcl dx,1
cmp di,es:[di+Com3Off] //ошибка
rcl dx,1
cmp di,es:[di+Com2Off] //ошибка
rcl dx,1
cmp di,es:[di+Com1Off] //ошибка
rcl dx,1
@Error:
mov ax,dx
pop es
end;
DarkGreen (2002-04-29 13:52:00) [1]2 Anatoly Podgoretsky ©
Зависит от конкретного компилятора, в BP 7.0 данный код будет работать, без каких либо исправлений (не считая комментариев), как в реальном, так и в защищенном режиме.
Anatoly Podgoretsky (2002-04-29 10:47:00) [2]Тут ошибок гораздо больше, но главная этот код для real mode, неприменим и не переделываемый под protected mode
Ты явно хочешь работать с ком портами, используй для этого WinApi
Alx2 (2002-04-29 10:38:00) [3]Вернее, так:
cmp di,word ptr es:[edi+Com4Off]
Alx2 (2002-04-29 10:35:00) [4]Вот так попробуй:
cmp di,word ptr es:[di+Com4Off]
Vovchik (2002-04-28 11:47:00) [5]> cmp di,es:[di+Com4Off]
Вместо di он хочет 32-битный регистр, например edi. Попробуй везде поменять di на edi, может поможет.
sammy (2002-04-28 11:42:00) [6]если кто знает помогите пожалуста!
я асм еще не очень знаю!
Заранее спасибо