【问题标题】:Error while linking 16-bit asm code链接 16 位 asm 代码时出错
【发布时间】:2013-07-20 07:22:18
【问题描述】:

这是我正在尝试组装和链接的程序。但我得到一个链接器错误:

Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

LINK : error : Segment reference in fixup record
A05ASM1.obj : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt

我正在使用以下命令来组装和链接:

  • 汇编命令:ml /c a04asm1.asm
  • 链接命令:link a04asm1.obj


page 60, 132  

TITLE         A04ASM1 (EXE) Move and add operations    
;-------------------------------------------------------------  
STACK             SEGMENT PARA STACK 'Stack'  
          DW      32 DUP(0)  
STACK         ENDS  
;-------------------------------------------------------------   
DATASEG       SEGMENT PARA 'Data'               
FLDD          DW      215  
FLDE          DW      125  
FLDF          DW      ?  
DATASEG       ENDS  
;-------------------------------------------------------------  
CODESEG       SEGMENT PARA 'Code'       
MAIN          PROC    FAR  
ASSUME  SS:STACK,DS:DATASEG,CS:CODESEG  

  MOV     AX,DATASEG  
  MOV     DS,AX  
  MOV     AX,FLDD  
  ADD     AX,FLDE  
  MOV     FLDF,AX  
  MOV     AX,4C00H  
  INT     21H  

MAIN              ENDP  
CODESEG           ENDS  
END     MAIN  

【问题讨论】:

标签: assembly segmentation-fault masm32


【解决方案1】:

您需要使用 16 位链接器才能正常工作,请尝试:

assemble: ml /c a04asm1.asm
link16 a04asm1.obj 

【讨论】:

  • thnx 这对我有用。你能告诉我我怎么知道什么时候使用link16,什么时候只使用link命令?有什么方法可以检查代码是 16 位还是其他?
  • 链接中给出的解释很好。但我仍然很困惑。我只是想了解有人如何弄清楚问题中提出的代码 sn-p 是使用 16 位符号并且应该由 16 位链接器链接?是因为使用的段或其他一些东西(仅用于 16 位的关键字)吗?
  • @dev - 一件事是您使用的是 16 位 DOS 中断(int 21h),阅读更多:spike.scu.edu.au/~barry/interrupts.html
  • 现在我明白了。这是因为代码中使用了 16 位关键字和指令。并且该代码无法使用 32 位链接器链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
  • 2011-05-20
  • 2017-05-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多