0049742B    8B4F 08        mov     ecx, dword ptr [edi+8]      ; ds:[04C8F5C0]=00008D41
0049742E    A1 887E6000    mov     eax, dword ptr [607E88]     ; ds:[00607E88]=00000003
00497433    8D5424 0C      lea     edx, dword ptr [esp+C]      ; 堆栈地址=0012F8B8
00497437    C74424 0C 6400>mov     dword ptr [esp+C], 64       ; 堆栈 ss:[0012F8B8]=00D145B4 (Magic.00D145B4)
0049743F    894C24 10      mov     dword ptr [esp+10], ecx     ; ecx=00008D41
00497443    895C24 14      mov     dword ptr [esp+14], ebx
00497447    895C24 18      mov     dword ptr [esp+18], ebx
0049744B    895424 24      mov     dword ptr [esp+24], edx
0049744F    C74424 1C 1000>mov     dword ptr [esp+1C], 10      ; 堆栈 ss:[0012F8C8]=023DAB38
00497457    895C24 20      mov     dword ptr [esp+20], ebx
0049745B    897424 2C      mov     dword ptr [esp+2C], esi     ; esi=04E81288
0049745F    894424 28      mov     dword ptr [esp+28], eax
这里的EBX=00000000,EAX=00000003
我在DELPHI里
mov     dword ptr [esp+20], ebx
mov     dword ptr [esp+28], eax
直接写成了
mov     dword ptr [esp+20], 0
mov     dword ptr [esp+28], 3
出现ACCESS Violation at address 00000000,read of address0000000
或在地址00000003,
而mov dword ptr [esp+1C], $10
mov     dword ptr [esp+C],$ 64
这里却没有错误提示,大家帮我看看丫

解决方案 »

  1.   

    从汇编的角度
    mov    dword ptr [esp+20], 0 
    mov    dword ptr [esp+28], 3 
    没有错误如果
    mov dword ptr [esp+1C], $10 
    mov    dword ptr [esp+C],$64 
    正确,可以试试
    mov    dword ptr [esp+20], $0也许delphi内嵌汇编语言把 0 当作直接寻址 把$0当作立即数
      

  2.   

    mov    dword ptr [esp+20], 0 
    mov    dword ptr [esp+28], 3 
    改成
    mov    dword ptr [esp+20], $0 
    mov    dword ptr [esp+28], $3
    这个还是提示错误,谁知道帮帮我丫,很急
    好久了,一直解决不了
     
      

  3.   

    先打好基础。ESP为堆栈指针(Stack Pointer),[ESP ± immed](immed即立即数,或称常量)通常用于表示堆栈上定义的临时变量。
      

  4.   

    asm
    mov    dword ptr [esp+$20], 0 
    mov    dword ptr [esp+$28], 3 
    end;
      

  5.   


    有书吗,我一直想找本Delphi的书看下,自己就买了本Delphi函数大全,只记住了部分,有谁能推荐一本好的书给小弟看看?
    我在东莞厚街的新华书店找了下,关于Delphi的书就剩下 Delphi函数大全和组件大全了,有没有从基本学起走的书?