powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как объявить виртуальный сегмент в асме?
7 сообщений из 7, страница 1 из 1
Как объявить виртуальный сегмент в асме?
    #33083640
Marmeladik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ситуация такая, в сегменте есть переменные, строки и тд и тп, но согласно алгоритму программы, сначала у дос выделим память, потом с диска загрузим шо надо. У меня получается шо как бы надо, но этот сегмент как бы уже в программе и место занимает соответственно, екзешник большой, как бы сделать шоб в программе я обращался к переменным как будто они уже в программе содержатся. но в екзешнике их небыло?
...
Рейтинг: 0 / 0
Как объявить виртуальный сегмент в асме?
    #33083985
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты на ассемблере пишешь или на чем?
Чем тебя не устраивает получить ссылку на выделеную память и запомнить эту ссылку в какой-либо своей переменной, а потом при нужде вытаскиваешь ссылку из памяти в регистр и...все.
...
Рейтинг: 0 / 0
Как объявить виртуальный сегмент в асме?
    #33084860
Marmeladik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пишу на тасме, попытаюсь еще раз объяснить, логический сегмент есть, физический его в программе нету, уже после запуска выделяется память, например :
mov ah, 9
mov dx, exit_msg ; смещение на сообщение
int 21h

exit_msg - нету в программе, оно загружается позже из файла

но шоб удобнее было объявить эту переменную так

DTSG segment
exit_msg DB 'Пока, до встречи'
exit_msg_lng equ $-exit_msg
DTSG ends
Так вот если так собрать, то в теле программы будет этот сегмент и сами данные, а вот так бы шоб ссылки были, а в самой программе не было этого сегмента
...
Рейтинг: 0 / 0
Как объявить виртуальный сегмент в асме?
    #33085580
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуй в сегмент кода запихать
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
Как объявить виртуальный сегмент в асме?
    #33086108
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MarmeladikПишу на тасме
Нет, так как ты хочешь сделать не получится. Все метки объявленые в тексте исходника превращаются в константы во время компиляции. После этого их уже фиг изменишь :).
Прийдется делать динамическую таблицу. У тебя будет одна динамическая таблица с указателями, одна ячейка таблицы (размером в слово) будет показывать на динамически выделеный кусок памяти в котором будет хранится уже конкретный текст. Размер мастер-таблицы будет соотвественно Количество_Текстов * Размер_Слова.
Потрать одно слово в сегменте статичных данных на указатель на эту мастер-таблицу. А потом можно будет делать так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
CODESEG segment 'CODE'

; именуем ячейки таблицы
msgExit    equ  0 
msgAbout equ  2 
msgUsage equ  4 

; Здесь мы выделяем память под таблицу с указателями
...

; Заполняем ее
...

; и наконец используем
mov bx, [DynamicMasterTable]
mov dx, [bx + msgAbout]
mov ah,  9 
int 21h
CODESEG ends

DATASEG segment 'DATA'
DynamicMasterTable dw  0 
DATASEG ends

Иех, давно я плюшками не баловался :)
...
Рейтинг: 0 / 0
Как объявить виртуальный сегмент в асме?
    #33086221
Фотография Палестинец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ээ. в масме помню можно было определять сегмент в таком стиле:
.data?
St db 256 dup(?)
...

значит сегмент содержит неинициализируемые переменные.( т.е. в екзехе его нету)
за тасм - увы не скажу


Если переменные объявишь так :

st db 'adasdasdasd'
..
// после всех инициализируемых!
Msg1 db 256 dup(?)
Msg2 db 256 dup(?)

то похоже будет то что тебе надо..(в екзеху dup(?) войти не должны а указатели будут валидными)
...
Рейтинг: 0 / 0
Как объявить виртуальный сегмент в асме?
    #33090124
Marmeladik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! Я поробую так и этак, фактически обращатся к переменым "объявив" в начале через equ, по поводу dup(?) - неинициализируемые данные, так по умолчанию тасм их инициализирует dup(0), но можно поставить ключ компилятору о совместимиости с масм или поиграть ключами при компиляции
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как объявить виртуальный сегмент в асме?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]