我用汇编语言创建一个非常简单的程序。要创建一个包含前几个斐波纳契数的数组。但是在第53行,我尝试使用MOV bx,WORD PTR [fibonacciArray + 5]
,它说它已经定义了fibonacciArray
我已经这是我见过的唯一方式PTR
用过的。
INCLUDE Irvine32.inc ;//Includes the Irvine32 library of functions
.data
fibonacciArray BYTE 0h,1h,0h,0h,0h,0h,0h ;only known f(0) = 0 && f(1) = 1
.code
main proc
MOV eax, 0 ;eax register is zeroed out
MOV ebx, 0 ;ebx register is zeroed out
MOV al, fibonacciArray ;al = 0
ADD al, [fibonacciArray + 1] ;al = 1
XCHG [fibonacciArray + 2], al ;fibonacciArray now 0,1,1,0,0,0,0
MOV eax, 0 ;eax register is zeroed out
ADD al, [fibonacciArray + 1] ;al = 1
ADD al,[fibonacciArray + 2] ;al = 2
XCHG [fibonacciArray + 3], al ;fibonacciArray now 0,1,1,2,0,0,0
MOV eax, 0 ;eax register is zeroed out
ADD al,[fibonacciArray + 2] ;al = 1
ADD al,[fibonacciArray + 3] ;al = 3
XCHG [fibonacciArray + 4], al ;fibonacciArray now 0,1,1,2,3,0,0
MOV eax, 0 ;eax register is zeroed out
ADD al,[fibonacciArray + 3] ;al = 2
ADD al,[fibonacciArray + 4] ;al = 5
XCHG [fibonacciArray + 5], al ;fibonacciArray now 0,1,1,2,3,5,0
MOV eax, 0 ;eax register is zeroed out
ADD al,[fibonacciArray + 4] ;al = 3
ADD al,[fibonacciArray + 5] ;al = 8
XCHG [fibonacciArray + 6], al ;fibonacciArray now 0,1,1,2,3,5,8
MOV bl,[fibonacciArray + 3]
call DumpRegs ;prints the register information to the screen
MOV bh,[fibonacciArray + 4]
call DumpRegs ;prints the register information to the screen
MOV bx,WORD PTR [fibonacciArray + 5]
call DumpRegs ;prints the register information to the screen
exit
main endp
end main
这里出现错误消息
1>------ Build started: Project: Project, Configuration: Debug Win32 ------
1>reorder.obj : error LNK2005: _main@0 already defined in fibonacci.obj
1>C:\Users\~~~~~~~~~~\Project32\Debug\Project.exe : fatal error LNK1169: one or more multiply defined symbols found
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
答案 0 :(得分:0)
罗斯里奇在评论中指出:
它说_main @ 0已在fibonacci.obj中定义。这意味着您已经主要定义了两次。一旦进入reorder.obj,一次进入fibonacci.obj。您可能只想在项目中使用后一个文件
你得到的链接器错误是:
1>reorder.obj : error LNK2005: _main@0 already defined in fibonacci.obj
阅读本文的方法是,当链接器正在处理reorder.obj
时,发现main
已在文件fibonacci.obj
中定义。出于显而易见的原因,您不能拥有两个带有外部(全局)链接的标签,因为如果代码中引用了标签,链接器就不知道您打算使用哪个标签。
您很可能无意中定义了main
两次 - 每次都在文件中。