你能看出我不匹配的块嵌套哪里错了吗?我就是看不出来? 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 ;
您将 Store
、Increment
和 Show
定义为 extrn
,因此您之后无法在此处定义它们 - 已经定义,来自外部来源!
删除那些 extrn
定义。 (只有 ExitProcess
必须保留,因为它 实际上 来自外部来源。)
中的"unmatched"部分很可能只是前面的错误导致Store PROC
行因为错误而被忽略,这会使Store ENDP
不匹配.因此,一旦 extrn
问题得到解决,此错误也应该消失。
装配新手。使用 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 ;
您将 Store
、Increment
和 Show
定义为 extrn
,因此您之后无法在此处定义它们 - 已经定义,来自外部来源!
删除那些 extrn
定义。 (只有 ExitProcess
必须保留,因为它 实际上 来自外部来源。)
中的"unmatched"部分很可能只是前面的错误导致Store PROC
行因为错误而被忽略,这会使Store ENDP
不匹配.因此,一旦 extrn
问题得到解决,此错误也应该消失。