Другие языки программирования и технологии

Turbo debugger. Начальный адрес сегментов программы.

Я правильно понимаю, что начальные адреса сегментов (данные, стек, код) программы находятся в регистрах ds, ss, cs? И тогда нач. адрес для данных = 489D, для стека = 48AC и для кода = 48BE. Или начальные адреса как-то иначе определяются?
И как можно вычислить конечный адрес?
Леша Попов
Леша Попов
65 542
Начальные в MSDOS - зависит от формата файла.

Если это .com файл - cs, ds, es, ss изначально одинаковы, т. к. вся программа содержится в одном сегменте + в начале идет 128 байт от PSP.
https://ru.wikipedia.org/wiki/Program_Segment_Prefix
И именно поэтому при комплияции в .com файл в MSDOS нужна инструкция компилятору org 100h

Если .exe - es=ds и указывают на сегмент с PSP, cs (код) в другом сегменте (из-за этого в .exe если работать с сегментом данных нужны пляски в виде mov ax, data + mov ds, ax), ss на выделенный сегмент стека.

Адреса - если Вас интересуют именно цифры - есс-но они будут разными и зависят от того сколько памяти сейчас занято по информации MSDOS и соотв. куда загрузилась программа.

Конечный адрес - можете поставить метку на последнюю инструкцию и получить offset. Или воспользоваться меткой типа END START (если она используется)

В уже работающей программе - никак. Никто не знает где у Вас конец программы.
Да MSDOS есс-но выделяет память при загрузке. И примерно определить можно сколько программа занимает, но
1 - делает он это параграфами (16 байт) а не точно байт-в-байт
2 - конец программы понятие такое.... что считать концом? Н-р точка выхода из программы не всегда находится в самом конце.

Вообще зачем Вам это всё? В современных версиях Windows (и не только) н-р другой режим работы процессора, используется плоская модель памяти, таблицы дескрипторов и т. д. и т. п. Т. е. почти всё иначе =) Есс-но это Ваше право заниматься чем Вы хотите, но вот стоит ли углубленно ковыряться в совсем мертвой ОС.
DJ
Duman Janbolatov
84 764
Лучший ответ
Леша Попов Благодарю за ответ)
Мне это для лабораторной. Задание такое)))
Файл .exe
Вот эти вычисленные начальные и конечные адреса нужно сравнить с данными в файле .map