Переменные ведут себя странно (Intel 8086) - PullRequest
2 голосов
/ 19 июля 2010

Редактировать: ответил на мой собственный вопрос.Увидеть ниже.-_-

У меня есть переменная, определенная в сегменте .data следующим образом:

retVal DW 0100h  ;stores hex fraction of the intermediate value. Starts at 1.00

Это значение, которое я добавляю или вычитаю, чтобы получить возвращаемое значение.

Первый раз, когда он обнаруживается в сегменте кода, находится в следующей точке:

sub [retVal], ax     ; 

Я использовал отладчик и могу подтвердить, что во время этой операции регистр ax был:0000h.

Тем не менее, если я добавлю следующую строку кода непосредственно перед ней:

mov dx, 0100h;
mov [retVal], 0100h;

Я получу совершенно другое значение (также неверное).Я совершенно сбит с толку.Я в корне неправильно использую переменные здесь?Я не понимаю, почему загрузка того же значения, для которого переменная была изначально инициализирована (и еще не изменена), изменила бы результаты.

Есть идеи?В противном случае, кто-то может напомнить мне, как отслеживать значение переменной через CodeView?(Я использую отладчик DOSBox)

Ответы [ 2 ]

0 голосов
/ 19 июля 2010

Является ли рассматриваемая программа подпрограммой?

Если это так, и вы вызываете подпрограмму несколько раз, вы сбрасываете переменные, которые вы изменяете?

Если вы не объявляете переменные повторно, вы не используете ранее объявленные значения во 2-й или будущий раз, когда вы запускаете подпрограмму, а измененные значения, которые вы имеете в конце первого выполнения.

0 голосов
/ 19 июля 2010

Если это настоящий 8086 (то есть, сегментированная архитектура), то что для ds установлено в точке, где вы делаете вычитание? Первое, что приходит на ум, это то, что вы можете менять совершенно другую область памяти.

Кроме того, вы должны предоставить:

  • самая короткая из возможных законченных программ, которые демонстрируют проблемное поведение (и вы можете решить, что решаете свою собственную проблему, делая это часто - часто)
  • фактические неверные значения, для которых устанавливается retVal, в обоих случаях.
...