Assembly 具有绝对地址的模块的组装和链接
我正在尝试制作一个位于绝对地址的模块。任何提到偏移量或试图调用子例程的行为都会导致链接失败 例如:Assembly 具有绝对地址的模块的组装和链接,assembly,masm,x86-16,Assembly,Masm,X86 16,我正在尝试制作一个位于绝对地址的模块。任何提到偏移量或试图调用子例程的行为都会导致链接失败 例如: .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 $-7C00
.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
我正在使用Microsoft MASM 5.0汇编程序和相关链接器。命令:
masm bull,bull,bull;
link bull;
如果任何一条注释行未注释,masm将成功,但链接将报告:
BULL.OBJ(bull.ASM) : error L2001: fixup(s) without data
pos: 41 Record type: 9C
我假设您有一个加载程序,它将在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
我假设您有一个加载程序,它将在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