在 获取CPU序列号和硬盘序列号 中[Error] GetCUPandHDserial.dpr(191): Inline assembler syntax errorprocedure Ring0Proc;
asm
// Wait for controller not busy
mov dx,01f7h
@1:in al,dx
cmp al,050h
jne @1 // Get first/second drive
dec dx
mov al,0a0h
out dx,al // Get drive info data
inc dx
mov al,0ech
out dx,al
nop
nop // Wait for data ready
@2:in al,dx
cmp al,058h
jne @2
nop
nop
// Read sector
xor ecx,ecx
mov dx,01f0h
@3:in ax,dx
mov word ptr dd[ecx*2],ax //停在此处
inc ecx
cmp ecx,256
jne @3 iretd //中断返回
end;
asm
// Wait for controller not busy
mov dx,01f7h
@1:in al,dx
cmp al,050h
jne @1 // Get first/second drive
dec dx
mov al,0a0h
out dx,al // Get drive info data
inc dx
mov al,0ech
out dx,al
nop
nop // Wait for data ready
@2:in al,dx
cmp al,058h
jne @2
nop
nop
// Read sector
xor ecx,ecx
mov dx,01f0h
@3:in ax,dx
mov word ptr dd[ecx*2],ax //停在此处
inc ecx
cmp ecx,256
jne @3 iretd //中断返回
end;
解决方案 »
- 程序运行没错,可是访问数据库会出现错误!急
- 请教!如何删除开始菜单中一个程序快捷方式
- 'of object'跟'overload'的区别就是前者是方法名可以不一样,后者是参数名可以不一样,只是这样吗?
- 如何利用api显示窗口(高难)
- 有关VPN拨号上网的应用程序的开发
- 如何将OleContainer置为空
- 大家好!!能否给小弟介绍几本Delphi 的好书?????发言就给分!!!!!!
- rave 是不是不支持中文字段的呀? 在线等待。。。。
- 熟悉Socket Tcp网络通讯的高手请进,状态是LISTENING, 但为何拒绝服务?
- 使用dbgrid或ehlib的dbgrideh怎样完成以下的表格啊?
- 在线等待
- 帮忙想想办法啊!!!
1。你的mov word ptr dd[ecx*2],ax 语法由问题 不存在dd这样的通用寄存器或段寄存器
2.在改动时,要注意地址格是要相同
源程序是我从别人处得的,我未改过,同时有一个编译好的dll,他不可能再把程序改错吧
还有2处同样的错
procedure Ring0Proc;
asm
// Wait for controller not busy
mov dx,01f7h
@1:in al,dx
cmp al,050h
jne @1 // Get first/second drive
dec dx
mov al,0a0h
out dx,al // Get drive info data
inc dx
mov al,0ech
out dx,al
nop
nop // Wait for data ready
@2:in al,dx
cmp al,058h
jne @2
nop
nop
// Read sector
xor ecx,ecx
mov dx,01f0h
@3:in ax,dx
mov word ptr dd[ecx*2],ax //----------------------err1
inc ecx
cmp ecx,256
jne @3 iretd //中断返回
end;procedure Change2Ring0;
begin
asm
mov eax, offset Ring0Proc
mov OurGate.off2, ax // 将 中 断 函 数 的 地 址
shr eax, 16 // 填 入 新 造 的 中 断 门
mov OurGate.off1, ax // 描 述 符
mov OurGate.op,0028h
mov OurGate.seg,0ee00h//----------------------err2
mov ebx,offset IDTR
sidt [ebx]
// 将 中 断 描 述 符 表 寄 存 器(IDTR)的 内 容 取 出
mov ebx, dword ptr [IDTR+2]
// 取 出 中 断 描 述 符 表(IDT) 基 地 址
add ebx, 8*3
// 计 算Int 3 的 描 述 符 应 放 置 的 地 址 选 用
//Int3 是 因 为 它 在Win32 保 护 模 式 下 未 占 用
mov edi, offset SavedGate
mov esi, ebx
movsd // 保 存 原 来 的Int 9 描 述 符 到
movsd //SavedGate 以 便 恢 复 mov edi, ebx
mov esi, offset OurGate
cli
movsd // 替 换 原 来 的 中 断 门 描 述 符
movsd // 以 安 装 中 断 服 务 例 程
sti
mov eax,6200h
// 用 以 测 试 放 在EAX 中 的 数 据 能 否 正 确 传 到Ring0 中 断
mov ecx,0
// 用 以 测 试 放 在ECX 中 的 数 据
// 能 否 正 确 传 到Ring0 中 断
// 因 为 很 多VxD 服 务 都 用此二 寄 存 器 传 递 参 数
int 3h
// 人 为 触 发 中 断, 平 时 会 出 现保 护 错 误 蓝 屏 或 非 法 操
// 作 对 话 框, 现 在 安 装 了
// 中 断 服 务 例 程 后, 就 会 通 过
//VMM 在Ring0 调 用 中 断 服 务 例 程Ring0Proc
mov edi, ebx
mov esi, offset SavedGate
cli
movsd // 恢 复 原 来 的 中 断 门 描 述 符
movsd
sti
end; asm
xor ecx,ecx
mov ebx,offset dd[10*2]//----------------------err3
@4:mov ax,[ebx]
mov byte ptr dsn[ecx],ah
inc ecx
mov byte ptr dsn[ecx],al
inc ebx
inc ebx
inc ecx
cmp ecx,20
jne @4
end;end;
IDTR: LONGDWORD;
SavedGate:TGate;
OurGate: TGate;
dd: array [0..256] of word;
dsn:array [0..20] of char; //存放硬盘序列号{$R *.res}