Сегментация - PullRequest
       85

Сегментация

0 голосов
/ 23 января 2019

Я пытаюсь понять некоторые из программ, которые были написаны для MS DOS.Перемещает ли инструкция mov ax, ds: 4Ch значение ds * 16 + 4Ch или это значение, сохраненное по адресу ds * 16 + 4Ch?

1 Ответ

0 голосов
/ 24 января 2019

Это операнд памяти, потому что он использует ds:. Синтаксис Intel в стиле MASM не требует [] вокруг операндов памяти.

Кроме того, нет единой машинной инструкции, которая будет вычислять линейный адрес в целочисленном регистре. Весь смысл сегментации состоит в том, чтобы иметь дело с линейными адресами, которые слишком велики для одного регистра. Вы можете сделать это вручную, если хотите, если вы находитесь в реальном режиме (где значение регистра сегмента является базой, например mov ax, ds / shl ax, 4), но не так просто, если значение регистра сегмента является просто селектором. Защищенный режим 286/386 или нереальный режим.

lea ax, [es: bx + si + 12] например только имеет дело с вычислениями смещения, игнорируя базу сегмента.

...