Проглядел бегло, от себя хочу сделать некоторое пояснение т.к. момент не объяснен, вдруг кому-нибудь понадобится.
Пример - процедура вывода 32-разрядного целого Val в порт Prt:
{ PortD[ x ] := y }
Procedure OPortD( Prt : Word; Val : LongInt ); Assembler;
Asm
DB 66H
MOV AX,WORD PTR Val
MOV DX,Prt
DB 66H
OUT DX,AX
End;
Касательно "db 66h" - на самом деле, 66H - машинный код т.н. префикса изменения разрядности операнда (с 16 до 32 разрядов в данном случае). Соотв., последовательность
DB 66H
MOV AX,WORD PTR Val
на самом деле обозначает команду (и выполняется процессором как)
MOV EAX,DWORD PTR Val
Турбо Паскаль - 16-разрядная система, и встроенный Ассемблер просто не знает о существовании 32-разрядных команд, поэтому пришлось воспользоваться таким способом.
Проглядел бегло, от себя хочу сделать некоторое пояснение т.к. момент не объяснен, вдруг кому-нибудь понадобится.
Пример - процедура вывода 32-разрядного целого Val в порт Prt:
Касательно "db 66h" - на самом деле, 66H - машинный код т.н. префикса изменения разрядности операнда (с 16 до 32 разрядов в данном случае). Соотв., последовательность
на самом деле обозначает команду (и выполняется процессором как)
Турбо Паскаль - 16-разрядная система, и встроенный Ассемблер просто не знает о существовании 32-разрядных команд, поэтому пришлось воспользоваться таким способом.