为何编译出错,请教汇编高手 (100分)

  • 主题发起人 主题发起人 zhangp
  • 开始时间 开始时间
Z

zhangp

Unregistered / Unconfirmed
GUEST, unregistred user!
var
aaa: array[0..256] of word;
procedure getvalue;
asm
mov word ptr aaa[ecx*2],ax
// 为何在Delphi5下编译通过,而在Delphi6下这一句出错 ,提示:Inline assembler syntax error
end;

 
没问题呀,我在D6下编译通过,也许是上一句有问题造成这句误报,把整个贴出来看看。
 
你的写法对不对,以下都没有问题:ecx,ax 为什么不赋值。
var
aaa: array[0..256] of word;
function getvalue:word;
asm
mov ecx,0
mov ax,10
mov word ptr aaa[ecx*2],ax
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(inttostr(getvalue));
//结果为 10
showmessage(inttostr(aaa[0]));
end;
 
delphi7可以编译通过,但执行getvalue报请求地址错误,ecx值不确定
 
未初次化
 
原因已找到,真是很奇怪。不是初始化ecx,ax的问题,
原先的代码如下,请大家在Delphi6下编译试试,看能否通过,
如果通不过的话,请告知原因

var
dd: array[0..256] of word;
procedure getvalue;
asm
mov ecx,2
mov ax,255
mov word ptr dd[ecx*2],ax
// 为何在Delphi5下编译通过,而在Delphi6下这一句出错 ,提示:Inline assembler syntax error
end;

 
我也碰到过相同的问题,百思不得其解!!
 
dd是asm的一个保留字!当然造成格式不对。。。。
 
至于为什么D5能够通过,那是因为D5还没有实现DD。
(DD是一个伪指令)
 
接受答案了.
 
后退
顶部