首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

关于DELPHI中嵌入汇编的有关问题

2012-03-02 
关于DELPHI中嵌入汇编的问题!有如下代码:functionWinProc(hWnd:HWNDuMsg:UNITwParam:WPARAMlParam:LPAR

关于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;

[解决办法]
楼上正解。这种调用方式比较多的出现在加壳软件上。算是花指令。

热点排行