Доступ к высокопроизводительному счетчику в 16-битном Turbo Pascal - PullRequest
3 голосов
/ 07 апреля 2011

Я пытаюсь использовать высокопроизводительный счетчик в 16-битной программе Turbo Pascal 7 (не спрашивайте ...), работающей в WinXP DOS.Я могу выполнить инструкцию RDTSC со встроенными $ 0F, $ 31, и для содержимого AX и DX задано то, что выглядит как разумные значения, но как я могу получить доступ к верхним половинкам EAX, EDX и записать результат в 2 глобальные переменные длинного слова?

Ответы [ 2 ]

4 голосов
/ 07 апреля 2011

Если я правильно прочитал мою документацию, то вы можете получить доступ к 32-битным регистрам из реального режима, используя префикс 0x66 к коду операции.Таким образом, вставка «$ 66 $ 50» должна иметь следующий эффект: она помещает EAX в стек как 32-битное значение.Затем вы просто выдвигаете нижнюю и верхнюю половины как два нормальных (16-битных) pop кода операции (сначала вы получите нижнюю половину).Для EDX используйте «$ 52» вместо «$ 50».

(я не пробовал это).

0 голосов
/ 07 апреля 2011

Для использования 32-битных регистров в DOS вам нужен либо расширитель DOS, либо плоский реальный режим.Первый позволит писать программы для защищенного режима (вам нужно где-то переключить модель генерации кода), а второй будет своего рода 32-битным реальным режимом.Я сомневаюсь, что он будет работать в DOS-боксе, может быть, эмулятор DOS будет работать.

AFAIK (15 лет ...) У Borland Pascal был собственный расширитель DOS, RTM.EXE или что-то в этом роде.

Переключение в плоский реальный режим: http://www.assembly.happycodings.com/code54.html

...