Ну, вы задали много вопросов, но я полагаю, что основной вопрос - как работают модели памяти, когда дело доходит до компиляции и компоновки кода сборки.На самом деле, у меня нет опыта работы с процессором 8088, но я думаю, что он не сильно отличается от 8086, так как он должен работать в реальном режиме .Хорошо, когда вы пишете ассемблерный код, вы должны выбрать модель памяти, в которой будет работать ваша программа. Это делается в вашей ассамблее с помощью директивы .model
(AFAIR использовали и TASM, и MASM).Эта директива может иметь следующие параметры: TINY, SMALL, MEDIUM, COMACT, LARGE и HUGE.Каждый из них определяет модель памяти вашей программы.Модель памяти TINY означает, что ваш код и ваши данные будут представлять собой один сегмент.Другие модели позволяют объявлять код и данные в отдельных сегментах.Или даже объявить несколько сегментов, которые содержат код (в случае, если они превышают ограничение в 64 КБ).Это было бы для начала.
Теперь, учитывая все вышесказанное, мы должны отметить, что разные модели памяти меняют способ обращения с данными.Если вы выбрали модель памяти TINY, ваш код и данные находятся в одном сегменте.Но в малой модели их нет.Поэтому все ваши инструкции ASM, которые обращаются к сегменту DATA, должны иметь надлежащий набор регистров сегмента (DS).