Я попытался использовать оператор SIZE в TASM, чтобы получить размер массива. Но здесь есть небольшая проблема ...
Если я использую директиву EQU для задания данных массива,
ASSUME CS:CODE,DS:DATA
ARRAY EQU 10H,20H,30H,40H
CODE SEGMENT
;[...Initialize data segment...]
MOV AX,SIZE ARR
;[...Rest of the code(if any)...]
CODE ENDS
DATA SEGMENT
ARR DB ARRAY
DATA ENDS
END
Это дает размер 1.
Наиболее вероятным для этого является способ, которым TASM вычисляет размер
SYMBOL_NAME DB(=1) (*) ARRAY[1+NUMBER OF COMMAS]
. Есть ли способ преодолеть это? Может быть, с помощью какой-либо другой директивы или путем условного расширения макросов перед сборкой ..
Вывод после использования упомянутого решения. (DOSBox 0.74)
Turbo Assembler Version 3.0 Copyright (c) 1988, 1991 Borland International
Assembling file: exp14b.ASM
ADD DI,$-ARR
**Error** exp14b.ASM(12) Can't subtract dissimilar relative quantities
Error messages: 1
Warning messages: None
Passes: 1
Remaining memory: 476k