你能看出我不匹配的块嵌套哪里错了吗?我就是看不出来? MASM

Can you see where my unmatched block nesting is wrong? I just can't seem to see it? MASM

装配新手。使用 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                ;


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

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

中的"unmatched"部分很可能只是前面的错误导致Store PROC行因为错误而被忽略,这会使Store ENDP不匹配.因此,一旦 extrn 问题得到解决,此错误也应该消失。