Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > 00CC = -3 ?


Автор: godsgame 1.1.2008, 23:26
Здравствуйте.

Есть примерно такой код:

Код

.model tiny
.code
.startup
.386
           Org 100h
           Jmp Short _Start  
X          Db  -1
Y          Db  -2
Z          Db  -3
Two           Db  2

Zero       Equ 0
ZDiv       Dw  0

_Start:
    mov al, y
    imul y
    movsx bx, y
    imul bx, ax    
    neg bx
    movsx cx, x    
    imul bx, cx

    mov al, z


Например после выполнения:
    mov al, y

Вроде бы все нормально и Ах = 00FE 

Проблемы начинаются через некоторое время,
когда программа доходит до:
    mov al, z

Вроде бы после этой конды Ах должен быть 00FD (-3)
НО в дебагере он пишет, что Ах = 00СС.

Почему так? долно же быть 00FD....

Заранее спасибо!


Автор: Akina 2.1.2008, 00:17
Прогнал твой код в дебаге. Сбой не воспроизвелся.
PS. И не должен был - с какой бы стати.

Добавлено через 1 минуту и 39 секунд
JackYF, счас окажется, что он это в ЕХЕ собирал... вот чую...

Автор: JackYF 2.1.2008, 00:17
Цитата(godsgame @  1.1.2008,  23:26 Найти цитируемый пост)
Почему так? долно же быть 00FD....

Та должно вроде бы. Странно, да. А если поставить Z -4, -5, что измениться? Интересно проследить ход изменения...

Автор: cardinal 2.1.2008, 00:20
А eсть уверенность в том, что z и Z это одинаковые вещи?

Автор: godsgame 2.1.2008, 13:56
Akina, 

нет, там .КОМ файл.

Использовал Турбо Дебагер от Борланда 5 версия для ДОС, если не ошибаюсь.
(такое синее окно, слева команды, справа регистры а снизу... ээ.. наверно типа память)


JackYF, 
сегодня проведу эксперимент и выложу скрины.


cardinal,
Нет уверенности, но в этом случае недоразумение случилось бы уже на у, потому что оно идет раньше.

Добавлено @ 14:00


Akina, 
Кстати в каком дебагере ты воспроизводил?
Дело в том, что я нигде не смог этот код воспроизвести, кроме как Борладским.
Остальным дебагерам (или отладчикам, не знаю как правильно),
не нравилась команда "MovSx" - они заменяли ее на что-то свое и после прохождения
этого своего выкидывали ошибку и прекращали....

Например в AFD.exe  и  AFDPRO.exe
было так:
Programm terminated OK

Только борланд корректно этот MovSx обрабатывает.


Автор: godsgame 2.1.2008, 14:25
Я очень извиняюсь... Сейчас делал дебаг и стало 00FD...
т.е сейчас все стало как надо...

Очень интересно конечно... вчера 100% было 00СС...

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


Akina, 

Если не трудно, напиши свой дебагер...


Потому что с моим прошлым случалось такое:
1)

Автор: godsgame 2.1.2008, 14:27
Появляется непонятный код и потом дебагер отказывается продолжать.
Это происходит после строки "DB OF"


Автор: godsgame 2.1.2008, 14:31
Но под борландом все ОК, и movSx нормально обрабатывает... а вчера столько промучился....

Автор: Akina 9.1.2008, 11:30
Цитата(godsgame @  2.1.2008,  15:25 Найти цитируемый пост)
Если не трудно, напиши свой дебагер...


Код

╔═[■]══════════════════════════════════╗
║                                      ║
║            Turbo Debugger            ║
║                                      ║
║             Version 3.1              ║
║        Copyright (c) 1988,92         ║
║        Borland International         ║
║                                      ║
║                  OK ▄                ║
║                  ▀▀▀▀                ║
╚══════════════════════════════════════╝

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)