Assembly 在TASM中使用两个数据段
我想在我的TASM程序中使用两个数据段。我知道,这很糟糕,但我必须有两个相当大的阵列,每个阵列的大小都是FFFFh(我希望我能有更大的阵列) 我假设段如下:Assembly 在TASM中使用两个数据段,assembly,tasm,Assembly,Tasm,我想在我的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 curr
假设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
我没有得到错误
有办法解决这个问题吗?或者,更好的是,不使用两个数据段
谢谢
假设
只是汇编程序的一个信息,它既不生成也不更改任何代码。如果汇编器抱怨,您必须插入它,例如。G“无法从当前段访问CS”。您可以在源代码的每个位置重新定义一个假设,它对以下行有效
例如:
.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
我不确定您是否可以同时为同一段寄存器假定多个段。您是否考虑过在第二个数据段中使用es
?我想您现在知道我们为什么要使用32位和64位程序了。