Вы видите, где неправильное вложение моего блока? Я просто не могу это видеть? MASM - PullRequest
1 голос
/ 08 марта 2020

Новое в сборке. Работая над печатью копий инкрементных значений с помощью 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                ;


1 Ответ

2 голосов
/ 08 марта 2020

Вы определяете Store, Increment и Show как extrn, поэтому вы не можете определить их здесь впоследствии - они уже определены как поступающие из внешнего источника!

Удалите эти extrn определения. (Должно остаться только ExitProcess, поскольку на самом деле поступает из внешнего источника.)

"Непревзойденная" часть, вероятно, является просто результатом предыдущей ошибки и Store PROC строка игнорируется из-за ошибки, из-за чего Store ENDP не найдется. Таким образом, эта ошибка также должна исчезнуть go после устранения проблемы extrn.

...