关于DELPHI中嵌入汇编的问题!
有如下代码:
function WinProc(hWnd: HWND; uMsg: UNIT; wParam: WPARAM; lParam: LPARAM):LRESULT;stdcall;
var
p: point;
begin
asm
call label
label:
pop ecx
sub ecx 10
mov p ecx
end;
//-------------------------------
Do Something
end;
编译的时候提示 label 未定义
小弟刚接触Delphi不久,搞不定这个问题.此段代码在VC中没有问题.想请教高人这种代码应该怎么翻译?先谢谢了!
[解决办法]
代码看起来有点问题,而且可以不用汇编,生成的汇编代码效率一样很高。
不知道p应该是Pointer类型还是TSmallPoint,Point应该是不对的。
function WinProc(hWnd: HWND; uMsg: UNIT; wParam: WPARAM; lParam: LPARAM):LRESULT;stdcall;
var
p: Pointer;
begin
p := Pointer(wParam - 10);
//-------------------------------
Do Something
end;
可能还是不太理解楼主的意思。
[解决办法]
asm
DB $E8
DB $00
DB $00
DB $00
DB $00
pop ecx
sub ecx 10 //这里是干什么?只是好奇~~呵呵
mov p ecx
end;
这个接可以啊!晕了~~~
DB $E8
DB $00
DB $00
DB $00
DB $00
这5行就是call label
[解决办法]
label用错了,语法是这样的
label StartHere;
begin
...
...
goto StartHere;
...
...
StartHere:
...
...
end;
[解决办法]
label是编译器的保留字,自己看帮助就知道了
[解决办法]
在Delphi 里用 lable 要先定义
[解决办法]
function WinProc(hWnd: HWND; uMsg: UNIT; wParam: WPARAM; lParam: LPARAM):LRESULT;stdcall;
var
p: point;
label: label0;
begin
asm
call label0
label0:
pop ecx
sub ecx 10
mov p ecx
end;
//-------------------------------
Do Something
end;
[解决办法]
zzwu(未名) 的方法也可以,不过有错
function WinProc(hWnd: HWND; uMsg: UNIT; wParam: WPARAM; lParam: LPARAM):LRESULT;stdcall;
var
p: point;
label label0; //没有:号的
begin
asm
call label0
label0:
pop ecx
sub ecx, 10 //要用,号
mov p , ecx //同理
end;
//-------------------------------
// Do Something
end;
[解决办法]
楼上正解。这种调用方式比较多的出现在加壳软件上。算是花指令。