segment



Автор Noname noname задал вопрос в разделе Другие языки и технологии

Что такое segment? и получил лучший ответ

Ответ от Денис Евдоченко[гуру]
@Это что значит программа не сможет использовать больше памяти? @
по умолчанию в дос программе выделяются ВСЕ свободные сегменты, все, и если не освободишь ненужную память и запустишь другое приложение (из себя) , то выдаст ошибку о недостатке памяти.
ASSUME CS:CSEG означает ассоциировать регистр сегмента кода с сегментом кода: ) это нужно только для ассемблера (tasm.exe или что там у тебя, fasm, nasm, masm...) и на конечный файл не влияет.
ехе проги строются по принцепу много сигментности. DB 256 DUP(?) эта означает, что в сегменте стека должно быть минимум 256, хотя это не так, реально под стэк отводится целый сегмент. 1 сегмент весит 65 кб. переполнение стэка раньше использовалось в дос-вирусологии для вышибания дебагеров, вирус работал первым и знал о переполнении и всё было нормально, потом востанавливал значение sp и выполнял код заражённого хозяина. реально, под данныекод может быть выделено несколько сегментов,
mov ax,ds:[2] прямое обращение к памяти, без переменных.
и кстати, стек можно перевести на сегмент данных: ) иногда может потребоваться: )
существуют локальные переменные.
они создаются так, в вр сохраняется в стеке и в него помещается значение sp, от sp вычитают размер всех локальных переменных (помни, джедай, стек растёт вниз!). обращение такое:
mov ax,[bp]
mov ax,[bp-4]
эх зачем я это всё рассказываю?.. .
если есть вопросы по ассемблеру (не по портам и прерываниям дос и его архитектуре и архетиктуре защитного режима и ssemmx3d now! расширениям) , обращайся)

Ответ от Мозг[гуру]
Вообще ассемблер не знаю, когда-то читал вкратце теорию по 16-битной части. ASSUME указывает компилятору, где, по каким адресам в памяти начинаются сегменты кода, данных и стека.
DB 256 DUP(?) означает выделить память ( define byte DB - определить байт) в 256 байт и заполнить эту память символом "?".
SSEG, если не изменяет память, это сегмент для хранения стека. То есть, максимально в стеке может храниться до 256 байт информации. Нужно учесть, что командой push в стек помещаются данные, а командой pop оттуда извлекаются. При помещении стек использует выделенную память, а при извлечении освобождает. То есть, в программе нельзя допускать, чтобы команда push внесла в стек больше 256 байт памяти подряд, без извлечения данных оттуда. Иначе произойдет переполнение стека, и в лучшем случае программа выдаст ошибку и завершится. А в худшем - будет работать неправильно, и не дай бог ( что вряд ли) повредит операционную систему. Стек - это самая важная тема в ассемблере. Так что изучи хорошенько.

Ответ от 22 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: Что такое segment?
Сегмент на Википедии
Посмотрите статью на википедии про Сегмент
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*