Вопрос № 144306: Здравствуйте, уважаемые эксперты! 1. Помогите с написанием длинного (межсегментного) перехода регистра CS. Меня интересуют способы, приёмы изменения этого сегмента. Если написать: mov ax,0BF00h mov es,ax то сегментный регистр es будет...
Вопрос № 144.306
Здравствуйте, уважаемые эксперты! 1. Помогите с написанием длинного (межсегментного) перехода регистра CS. Меня интересуют способы, приёмы изменения этого сегмента. Если написать: mov ax,0BF00h mov es,ax то сегментный регистр es будет равен 0BF00h. Этим же приёмом можно изменить и другие сегментные регистры: ds и ss, но только не cs! Отладчик напишет: Invalid opcode. Странно, про другие регистры не пишет, а про cs пишет. Неужели всё дело в том, что cs вместе с ip указывает на адрес текущей команды. 2.
Я знаю только один способ изменения cs, вот такой: jmp dword ptr cs:[x] int 20h x dd '1234' Но опять непонятно, почему CS меняется на 3132, ведь я прописал сегмент 12, а смещение 34. В отладчике эта команда пишется: jmp FAR cs:[107], а по адресу 107 - 10А находятся числа 34 33 32 31. Откуда тройки-то взялись? Заранее спасибо.
Отправлен: 18.09.2008, 15:24
Вопрос задал: Aistesis (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 4)
Отвечает: Зенченко Константин Николаевич
Здравствуйте, Aistesis!
1) Да это особенный регистр вместе IP он указывает на адрес следующей исполняемой команды. Вы не втретите команд типа MOV CS,RR или POP CS , хотя PUSH CS есть. Также как IP его можно изменить только косвенно, командами переходов, вызовами подпрограмм и возвратами из них.
2) Все правильно Вы записываете строку символов, а это не числа. Если посмтрите на кодовую таблицу символов,то увидете, что "0"=30h, "1"=31h, "2"=32h
и т.д. Вот и всё, спрашивайте в мини-форуме. Удачи!
--------- Итерация от человека, рекурсия — от Бога (Питер Дойч)
Ответ отправил: Зенченко Константин Николаевич (статус: Профессор) Украина, Киев Тел.: +380979536619 Адрес: Украина г.Киев ---- Ответ отправлен: 18.09.2008, 15:47 Оценка за ответ: 5