1

我有一个这样的结构:

struct MESGE
     TEXT db 'Message',0
     mLen db 8
ends 

我需要将它发送到一个 proc,它将在屏幕上显示一行:

proc OutMes, pMESG:MESGE

  push 0
  push chrsWritten
  push [pMESG.mLen]
  push [pMESG.TEXT]
  push [hStdOut]
  call [WriteConsoleA]

  ret
endp

我怎样才能做到这一点?如果我在参数中使用 MESGE 类型,那么 fasm 会报错。如果我使用 dword 类型(将 MESGE 作为 ptr 发送)我不知道如何检索此结构的成员(实际上,它们可以通过偏移量检索但我不喜欢这种方法 - 如果有很多成员struct,构造会很复杂)

在 MASM,它可以这样完成:

ShowMessage PROC hMes: dword
mov ebx,hMes
assume ebx:ptr MESG
...

但在 FASM 建设中

assume ebx:ptr MESG
or 
assume ebx:[ptr MESG]

报告为错误。我怎样才能做到这一点?

4

1 回答 1

2

也许您正在寻找虚拟指令:

struct MESGE
        TEXT db 'Message',0
        mLen dd 8
ends

.code
        mov     ebx,pMESGE
        call    OutMes
        ret


virtual at ebx
        oMESGE MESGE
end virtual

proc OutMes
        push 0
        push dummy
        push [oMESGE.mLen]
        lea  eax,[oMESGE.TEXT]
        push eax
        push [hout]
        call [WriteConsoleA]
        ret
endp

.data

pMESGE  MESGE
dummy   rd 1
hout    rd 1
于 2012-01-23T18:58:31.347 回答