具有绝对地址的模块的汇编和 link
Assembly and link of module with absolute addresses
我正在尝试创建一个位于绝对地址的模块。任何提及 OFFSET 或尝试调用子程序都会导致 link 失败。
示例:
.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 汇编程序和关联的 linker。命令:
masm bull,bull,bull;
link bull;
如果注释行中的任何一行未被注释,masm 将成功,但 link 将报告:
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
我正在尝试创建一个位于绝对地址的模块。任何提及 OFFSET 或尝试调用子程序都会导致 link 失败。
示例:
.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 汇编程序和关联的 linker。命令:
masm bull,bull,bull;
link bull;
如果注释行中的任何一行未被注释,masm 将成功,但 link 将报告:
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