汇编中的PTR正在重新定义对象并且不会运行

时间:2015-09-15 02:11:01

标签: assembly masm irvine32

我用汇编语言创建一个非常简单的程序。要创建一个包含前几个斐波纳契数的数组。但是在第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 ==========

1 个答案:

答案 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两次 - 每次都在文件中。