【问题标题】:Can you see where my unmatched block nesting is wrong? I just can't seem to see it? MASM你能看出我不匹配的块嵌套在哪里出错了吗?我好像看不出来? MASM
【发布时间】:2020-03-08 04:16:00
【问题描述】:

组装新手。使用 C++ 和 MASM 打印增量值的副本,这对我来说看起来不错。 我收到了这个错误:

..\..\..\..\Downloads\MASM\project.asm(24): error A2005: symbol redefinition : Store
..\..\..\..\Downloads\MASM\project.asm(32): fatal error A1010: unmatched block nesting : Store

CONSOLE     equ     -11
KEYBOARD    equ     -10

extrn   Store:          PROC
extrn   increment:      PROC
extrn   Show:           PROC
extrn   ExitProcess:    PROC    

.data
.data?
c1      byte    ?   ;pass in usual reg  /byte=8-bit char                    char
s1      word    ?   ;pass in usual reg  /word=16-bit short                  short
us1     word    ?   ;pass in usual reg  /word=16-bit short                  unsigned short
i1      dword   ?   ;pass in usual reg  /dword=32-bit int or long int       int
ull1    qword   ?   ;offset 48,56,64    /qword=64-bit long long int         unsigned long long int
ll1     qword   ?   ;offset 48,56,64    /qword=64-bit long long int         long long int
uc1     byte    ?   ;offset 48,56,64    /byte=8-bit char                    unsigned char

.code

Store       PROC
         mov    rcx, c1             ;store param1
         mov    rdx, s1             ;store param2
         mov    r8, us1             ;store param3
         mov    r9, i1              ;store param4
         mov    r10, ull1           ;store param5
         mov    r11, ll1            ;store param6
         mov    r12, uc1            ;store param7
Store       ENDP

Increment   PROC
         inc    c1                  ;increment param1
         inc    s1                  ;increment param2
         inc    us1                 ;increment param3
         inc    i1                  ;increment param4
         inc    ull1                ;increment param5
         inc    ll1                 ;increment param6
         inc    uc1                 ;increment param7
Increment   ENDP

Show        PROC
       Display
Show        ENDP

Display:
    mov      c1, rcx            ;
    mov      s1, rdx            ;
    mov      us1, r8            ;
    mov      i1, r9         ;
    mov      ull1, r10          ;
    mov      ll1, r11           ;
    mov      uc1, r12           ;
    pop      rcx                ;
    pop      rdx                ;
    pop      r8                 ;
    pop      r9                 ;
    pop      r10                ;
    pop      r11                ;
    pop      r12                ;


【问题讨论】:

  • 你的 sn-p 甚至没有 32 行。剩下的代码是什么?
  • 已编辑。现在全部更新了

标签: windows assembly x86 masm


【解决方案1】:

您将StoreIncrementShow 定义为extrn,因此您以后无法在此处定义它们 - 它们已经定义为来自外部来源!

删除那些extrn 定义。 (只有 ExitProcess 必须保留,因为它实际上来自外部来源。)

“不匹配”部分可能只是上一个错误的结果,而Store PROC 行由于该错误而被忽略,这将使Store ENDP 不匹配。因此,一旦extrn 问题得到修复,这个错误也应该消失。

【讨论】:

  • 非常感谢。那是我的问题!立即清除。
  • @JennyNguyen:如果这完全回答了您的问题,您可以使用投票箭头下方的复选标记将其标记为已接受的答案。
  • 知道了!谢谢你告诉我
猜你喜欢
  • 2023-04-01
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多