今天我在玩我的旧电脑,尝试在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.格式化软驱上的软盘。有没有一种方法可以在Delphi 7上使用它而不会出现冻结和蓝屏?或者Delphi只允许使用32位汇编?我做错了什么吗?
发布于 2017-05-26 05:39:44
只要您的应用程序被构建为“32位Windows”应用程序,中断就不能工作,因为这些中断根本没有映射。
您可以尝试将您的应用程序编译为“16位控制台”应用程序。我不知道Delphi是否支持这一点,但这是我获得int 0x13和int 0x10仿真的最好猜测。
顺便说一下,你的汇编代码不应该使用十六进制数字吗,就像这样:?
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)
发布于 2017-05-26 09:29:04
Delphi7生成32位可执行文件。因此,您的16位汇编代码与您使用的编译器不兼容。你可能有一些幸运的16位编译器,例如Turbo Pascal或Delphi1。但我怀疑,使用Win32 API来实现你的目标会更有意义。
https://stackoverflow.com/questions/44190197
复制相似问题