Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Windows98上使用Delphi上的16位汇编内联?_Delphi_Assembly_Interrupt_Pascal_Windows 98 - Fatal编程技术网

如何在Windows98上使用Delphi上的16位汇编内联?

如何在Windows98上使用Delphi上的16位汇编内联?,delphi,assembly,interrupt,pascal,windows-98,Delphi,Assembly,Interrupt,Pascal,Windows 98,今天我在玩我的旧电脑,试图在Delphi中使用16位汇编。它可以用32位工作,但当我使用中断时总是有问题。蓝屏或冻结,这让我相信这是不可能做到的。我在Windows98上使用Delphi7,使用这个简单的代码 program Project1; {$APPTYPE CONSOLE} uses SysUtils, Windows; begin asm mov ax,$0301 mov bx,$0200 mov cx,$0001 xor dx,dx i

今天我在玩我的旧电脑,试图在Delphi中使用16位汇编。它可以用32位工作,但当我使用中断时总是有问题。蓝屏或冻结,这让我相信这是不可能做到的。我在Windows98上使用Delphi7,使用这个简单的代码

program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, Windows;
begin
    asm
    mov ax,$0301
    mov bx,$0200
    mov cx,$0001
    xor dx,dx
    int $13
    int $20
    end;
MessageBox(0,'Okay','Okay',MB_OK);
end.

“格式化”软盘驱动器上的软盘。有没有一种方法可以在Delphi7上使用它,而不会冻结屏幕和蓝色屏幕?或者Delphi只允许使用32位汇编?我做错什么了吗?

只要您的应用程序构建为“32位Windows”应用程序,中断就无法工作,因为这些中断根本没有映射

您可以尝试将应用程序编译为“16位控制台”应用程序。我不知道Delphi是否支持这一点,但这是我获得
int0x13
int0x10
仿真的最佳猜测

顺便问一下,您的汇编代码不应该使用十六进制数字吗,比如:

mov ax, $0301
mov bx, $0200
mov cx, $0001
xor dx, dx
int $13
int $20
现在,您可能正在调用中断$0d,根据Ralf Brown的中断列表,这意味着:

INT 0D C-IRQ5-固定磁盘(PC、XT)、LPT2(AT)、保留(PS/2)


Delphi7生成32位可执行文件。因此,您的16位汇编代码与您使用的编译器不兼容。
您可能会幸运地使用16位编译器,例如Turbo Pascal或Delphi 1。但我认为,使用Win32 API来实现您的目标更有意义

通常,您不能直接调用bios并绕过驱动程序。顺便说一句,你不是说13美元和20美元吗?我试了两种方法。。。这些中断对Delphi7生成的32位应用程序不可用。您可以使用Delphi 1(它生成16位应用程序),Delphi 2发布时也包含了它(用于桥接从16位到32位的转换)。使用D7是不会成功的。这些天来,蓝屏软盘的格式化对我来说都不合适:)如果你真的想格式化软盘,用
“格式a:”
“启动一个新的进程不是更容易吗??Afaik仅D1支持16位。FPC在主干中有一些16位的支持,但这是相当新的,它不工作。。。我又看到了蓝屏。那么这不可能吗?@维克多:是的,不可能。