为什么这句汇编在DELPHI3中编译通过,但在DELPHI6中通不过,我的汇编很差,请高手帮忙。在线等待!!!!! 不够可以再加 (

  • 主题发起人 主题发起人 nibul
  • 开始时间 开始时间
N

nibul

Unregistered / Unconfirmed
GUEST, unregistred user!
为什么这句汇编在DELPHI3中编译通过,但在DELPHI6中通不过,我的汇编很差,请高手帮忙。在线等待!!!!! 不够可以再加 (100分)<br />共有三句,请高手帮忙改改
MOV byte ptr [EDX+OFFSET CodeBuf], AL
MOV byte ptr [EDX+OFFSET CodeBuf], AH
MOV EAX, [EBX+OFFSET CodeBuf] // PutC only stores AL
 
在Delphi7中没问题, 你把delphi6 安装一下升级包2试试!
 
具体在哪一句的时候出错了?
 
to wwwl:
7下我试了,不行。
to coolbaby:
三句都有错,好像是OFFSET的问题。
 
如下! 可通过
procedure TForm1.Button3Click(Sender: TObject);
var
codebuf:array[0..3] of byte;
p:Pointer;
begin
p:=Pointer(@codebuf[0]);
asm
Mov edx,0;//为方便测试,将EDX赋初值
MOV byte ptr [EDX+p], AL
MOV byte ptr [EDX+p], AH
MOV EAX, [EDX+p] // PutC only stores AL
end;

end;
 
to zzzworm:
为什么这么写给我解释一下好吗?
这是一个加密控件的代码,这三句出现在不同的地方,如果想你这么改完会不会影响使用?
 
在我这儿D7下可以, 一开始它提示"CodeBuf标识符未定义",你把它定义为整型或指针即可,或者在其他单元
本来就定义了,只是没有引用而已!
 
这是错误信息:
[Error]Inline assembler syntax error
下面的警告对程序有影响吗?
[Warning]Constant expression violates subrange bounds
 
反正 offset是取地址,用Pointer来赋值虽然看着麻烦点,但也能用。应该与Offset等效吧。
 
to zzzworm
CodeBuf 是这样定义的 ARRAY [ 0..16 ] OF Byte;
我按你的修改了代码,但是稍有不同
一开始我是这么改的:MOV byte ptr [EDX+Pointer(@codebuf)], AL
但是提示我:未知的@codebuf
然后我把“@”去了就可以了,这样可以吗?
 
codebuf默认指向 codebuf[0], 直接@codebuf应该能行吧。 跟踪执行看看吧。
 
上面有笔误。 我大约认为 :)
1. pointer(codebuf) 等价于 pointer(@codebuf[0])
2. 内嵌汇编中通常只允许直接读存变量,不支持 变量 a+b 一类的操作。
3. 在汇编中@通常用来标识跳转点的标识符如@Next: mov ax,0 ,故会出错。
 
谢谢了,我用改过的控件对150M的文件进行加密一切正常。
 
接受答案了.
 

Similar threads

I
回复
0
查看
662
import
I
I
回复
0
查看
660
import
I
I
回复
0
查看
814
import
I
I
回复
0
查看
964
import
I
后退
顶部