gpt4 book ai didi

assembly - 在 TASM 中使用两个数据段

转载 作者:行者123 更新时间:2023-12-02 21:48:43 26 4
gpt4 key购买 nike

我想在 TASM 程序中使用两个数据段。我知道,这很糟糕,但我必须有两个相当大的数组,每个数组的大小为 FFFFh(我希望我能让它们更大)。

我假设这些段如下:假设 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 只是汇编器的一个信息,它既不产生也不改变任何代码。如果汇编器提示,例如,您必须插入它。 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

关于assembly - 在 TASM 中使用两个数据段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32988123/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com