在 TASM 中使用两个数据段

Working with two data segments in TASM

我想在我的 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 时我没有收到错误。

有办法解决吗?或者,更好的是,不使用两个数据段?

谢谢!

ASSUME只是给汇编程序的一个信息,它不产生也不改变任何代码。你必须插入它,如果汇编程序抱怨,e。 G。 "CS unreachable from current segment"。你可以在源码的每一处重新定义一个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