Уважаемые эксперты, у меня вот какой вопросик:
почему при загрузке в память .COM программы регистр CX почти всегда имеет какое-либо значение отличное от нуля, в то время как остальные (AX, BX, DX) всегда 0 ?
Заранее спасибо.
Отправлен: 24.01.2005, 12:14
Вопрос задал: Diver (статус: Читатель)
Всего ответов отправлено: 6
Отвечает: AxMAD
Здравствуйте, Diver!
Я точно не помню (давно не занимался программированием под ДОС), но возможно это указывает на смещение данных типа коммандной строки.
Читайте документацию основ по ассемблеру!
Ответ отправил: AxMAD (статус: 8-ой класс)
Отправлен: 24.01.2005, 12:34
Отвечает: DSota
Здравствуйте, Diver!
Это зависит от системы и отладчика, под которыми она запущена. АХ, ВХ, DХ - тоже имеют неопределенные значения, и не всегда нули...
Ответ отправил: DSota (статус: 10-ый класс)
Отправлен: 24.01.2005, 12:43
Отвечает: Ayl
Здравствуйте, Diver!
Ты неправ насчет того, что остальные регистры всегда равны нулю. При запуске COM-программы из командной строки регистры принимают следующие значения:
al = bl = ff, если первый параметр командной строки - путь к файлу с несуществующим именем диска (task.com Z:), иначе al = bl = 0.
ah = bh = ff - то же для второго параметра.
cx = 00FFh
dx = cs = ds = es = ss
si = ip = 100h
di = sp = 0FFFEh
bp = 09??h
WORD [FFFE] = 0000
EFLAGS (binary) = xxxxxxxx xxxxxxxx
xxxx0x1x xx0x0x1x
DF = 0
IF = 1
остальные флаги = x
При запуске программы под отладчиком все регистры обычно сбрасываются в 0, кроме сегментных и указателя стека.
Ответ отправил: Ayl (статус: Профессор)
Отправлен: 24.01.2005, 14:22
Отвечает: Стас
Здравствуйте, Diver!
Зависит от дебагера. Или DOS. У меня например для COM и EXE файлов:
DX=16A6
CX=00FF
BX=0000
AX=0000
(Причем DX=DS)
В принципе никому нет дела до того что там лежит. Ни DOS-что оставила то и оставила.
Тебе тоже не должно быть дела. Что надо положи в регист, потом используй.
Только разве что дебаггер будет чистить регистры, для "красоты".
Ответ отправил: Стас (статус: Студент)
Отправлен: 24.01.2005, 15:59
Отвечает: Undertaker
Здравствуйте, Diver!
Вероятно реализация INT 21h, 4Bh тому виной :-)
Ответ отправил: Undertaker (статус: 3-ий класс)
Отправлен: 24.01.2005, 17:49
Отвечает: Евгений Иванов
Здравствуйте, Diver!
а это совершенно не имеет значения. это не стандартизовано, какие значения в регистрах должны быть. инициализируй самостоятельно и не надейся на то, что там должно что-то быть.
Удачи!
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 25.01.2005, 00:30