2016-07-28 11 views
0

絶対アドレスに配置されるモジュールを作成しようとしています。 OFFSETまたはサブルーチンを呼び出そうとすると、リンクが失敗します。絶対アドレス付きモジュールのアセンブリとリンク

例:

.8086 

_TEXT SEGMENT BYTE AT 440H 
    ORG 4400H 
    ASSUME CS:_TEXT 

START: 
START_O EQU THIS WORD 
; MOV DI, OFFSET START 
; MOV DI,START_O 
; CALL SUBR 
; CALL SUBR_O 


SUBR: 
SUBR_O EQU $-7C00h 
    RET 


_TEXT ENDS 
    END 

私はマイクロソフトMASM 5.0アセンブラおよび関連するリンカを使用しています。コマンド:コメント行のいずれかが、コメントのないMASMは成功しますが、リンクが報告されている場合

masm bull,bull,bull; 
link bull; 

BULL.OBJ(bull.ASM) : error L2001: fixup(s) without data 
pos: 41 Record type: 9C 

答えて

2

私はあなたが00000でこのコードをロードするローダーを持っていると仮定します04400h 、目的は.comファイルを生成することです。この場合、セグメントアドレスを指定する必要はありません。

_TEXT SEGMENT ;assume loaded at 00000h:04400h 
     ASSUME CS:_TEXT 
     ORG  00000H 
START: MOV  DI,OFFSET CS:START 
     CALL SUBR 
     RET 
     ORG  07C00H-04400H 
SUBR: RET 
_TEXT ENDS 
     END  START 

注 - これは大きな.comファイル(14337バイトの長さ)を作成します。 SUBRが外部コードの場合は、次のような小さな.comファイルを作成するときに使用します。

_TEXT SEGMENT ;assume loaded at 00000h:04400h 
     ASSUME CS:_TEXT 
     ORG  00000H 
START: MOV  DI,OFFSET CS:START 
     CALL START+07C00H-04400H 
     RET 
_TEXT ENDS 
     END  START 
関連する問題