2010-07-19 2 views
2

Редактировать: Ответил мой собственный вопрос. Смотри ниже. -_-Переменные, ведя себя странно (Intel 8086)

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

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

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

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

sub [retVal], ax  ; 

я использовал отладчик, и может подтвердить, что во время этой операции, регистр топора: 0000h ,

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

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

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

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

+0

Мы не сможем догадаться, что происходит не так, если вы только показываете нам строки кода, которые вы * думаете * вызывают проблему. Пожалуйста, разместите короткий, полный пример, демонстрирующий проблему, которую вы видите. Не забудьте четко указать как * ожидаемые *, так и * фактические * результаты. –

ответ

0

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

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

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

0

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

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

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