我想在我的TASM计划中使用两个数据段。我知道,它很糟糕,但我必须有两个非常大的数组,每个数组大小为FFFFh(我希望我能让它们更大)。
我按照以下方式确定了细分:assume cs:code, ds:data, ds:dat2, ss:stac
。在每个数据段中使用变量之前,我写道:
mov ax, data (or dat2)
mov ds, ax
现在,当我尝试编译时,对于使用变量的每一行,我都会收到以下错误:
**Error** source.ASM(232) Can't address with currently ASSUMEd segment registers
另外,我注意到只有当我直接引用变量时才会出现错误。当我写mov ax, example
时出现错误,但是当我写mov ax, offset example
时,我没有收到错误。
有没有办法解决这个问题?或者,更好的是,不使用两个数据段?
谢谢!
答案 0 :(得分:4)
ASSUME
只是汇编程序的信息,它既不会生成也不会更改任何代码。如果汇编程序抱怨,你必须插入它,e。 G。 " CS无法从当前段"到达。您可以在源代码的每个位置重新定义ASSUME
,它对以下行有效。
示例:
.MODEL huge
_TEXT SEGMENT
ASSUME CS:_TEXT
start:
mov ax, _DATA
mov ds, ax
lea dx, [txt1]
mov ah, 09h
int 21h
mov ax, _DAT2
mov ds, ax
lea dx, [txt2]
mov ah, 09h
int 21h
jmp far ptr far_away
_TEXT ENDS
_TEXT2 SEGMENT
ASSUME CS:_TEXT2
far_away:
mov ax, _DAT3
mov ds, ax
ASSUME DS:_DAT3
mov dx, example
mov ah, 02h
int 21h
xchg dh, dl
int 21h
mov dl, 13
int 21h
mov dl, 10
int 21h
lea dx, [txt3]
mov ah, 09h
int 21h
mov ax, 4C00h
int 21h
_TEXT2 ENDS
_DATA SEGMENT
ORG 0FF00h
txt1 DB "TXT_1", 13, 10, '$'
_DATA ENDS
_DAT2 SEGMENT
ORG 0FF00h
txt2 DB "TXT_2", 13, 10, '$'
_DAT2 ENDS
_DAT3 SEGMENT
ORG 0FF00h
example DW 'ab'
txt3 DB "TXT_3", 13, 10, '$'
_DAT3 ENDS
_STACK SEGMENT STACK 'STACK'
DW 1000h dup(?)
_STACK ENDS
END start