Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU
(Тестовый режим)

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler

Выпуск № 47
от 29.01.2005, 18:00

Администратор:Калашников О.А. (adm@rusfaq.ru)
В номере:Вопросов: 1, Ответов: 6


Вопрос № 16197
Уважаемые эксперты, у меня вот какой вопросик:
почему при загрузке в память .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


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, Россия, Москва. Идея, дизайн, программирование: Калашников О.А.


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.faq
Отписаться

В избранное