Когда новички слышат слово «ассемблер», у них перед глазами возникают ряды цифр, страшные команды вроде MOV и ADD, и, конечно, сегменты. А ведь сегментация — это просто. Готовьтесь, сейчас мы на пальцах разберем директиву SEGMENT и поймем, почему без нее ваш код даже не запустится. Представьте, что оперативная память — это огромное поле. А процессор — фермер, который по нему ходит. Чтобы не заблудиться, он делит поле на участки: в одном сегменте у нас морковка (код программы), в другом — кабачки (данные), в третьем — место для шашлыков (стек). В реальных архитектурах (например, x86 в реальном режиме) процессор физически не может адресовать всю память одним числом из-за разрядности регистров (то есть размер регистра просто не позволяет поместить в него адрес памяти, если её “слишком” много). Вот тут и появляется сегментация. Директива SEGMENT — это ваш колышек и веревка. Вы говорите ассемблеру: «Отсюда и до сюда — это мой сегмент кода, туда не лезь». Пишется это просто (пример для TASM/
SEGMENT в ассемблере: Как нарезать память на «колбасу» для процессора
ВчераВчера
26
3 мин