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

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


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

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

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

Выпуск № 119
от 20.04.2005, 23:40

Администратор:Калашников О.А.
В номере:Вопросов: 2, Ответов: 3


Вопрос № 19748: Доброго времени суток НАрод Вопрос: какой дебагер лучше всего взять, который бы залазил в API функции слышал про SOftIce, но еще не загружал, не знаю залазиет он в API или нет PS>Буду благодарен за любую инфу ...
Вопрос № 19799: Здраствуйте! Скажите, пожалуйста, какими из указанных здесь признаков могут отличаться команы, имеющие одинаковый код операции: длинной, способом адресации, скоростью выполнения. И почему? Спасибо....

Вопрос № 19748
Доброго времени суток НАрод
Вопрос: какой дебагер лучше всего взять, который бы залазил в API функции
слышал про SOftIce, но еще не загружал, не знаю залазиет он в API или нет
PS>Буду благодарен за любую инфу
Отправлен: 15.04.2005, 08:16
Вопрос задал: Хатабычев Андрей (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: DSota
Здравствуйте, Хатабычев Андрей!
SoftIce позволяет просматривать API.
Лучше его я еще не видел. Только советую взять отдельный SoftIce, в пакете из Numega Driver Studio он иногда подвисает.
Ответ отправил: DSota (статус: Студент)
Отправлен: 15.04.2005, 09:14
Оценка за ответ: 5

Отвечает: John Freeman
Здравствуйте, Хатабычев Андрей!
1) точно - только слышал, это в 9x нельзя(без кое-чего) лазать в системные функции
2) Любой и SoftIce с патчем даже под 9x
Ответ отправил: John Freeman (статус: Профессионал)
Отправлен: 15.04.2005, 12:47


Вопрос № 19799
Здраствуйте!
Скажите, пожалуйста, какими из указанных здесь признаков могут отличаться команы, имеющие одинаковый код операции:
длинной, способом адресации, скоростью выполнения. И почему?
Спасибо.
Отправлен: 15.04.2005, 22:04
Вопрос задал: mario (статус: Посетитель)
Всего ответов отправлено: 1

Отвечает: Вiктор
Здравствуйте, mario!
команы, имеющие одинаковый код операции могут отличаться длинной, способом адресации, скоростью выполнения, - ваше предположение правильное :-).
например (немного разъехался пример, но я думаю вы поймёте), для USE16:
1) 661510000000 adc eax,00000010
2) 151000 adc ax,0010
3) 13D9 adc bx,cx
4) 110F adc [bx],cx
5) 83D310 adc bx,0010
6) 81D33412 adc bx,1234
7) 6683D310 adc ebx,0010
8) 81173243 adc word ptr [bx],4332
9) 6766131C81 adc ebx,[ecx+4*eax] (адресация с байтом SIB)
вот, 3 и 9 - код операции 10dw, они отличаются длиной (2 и 5 байт соотв), способом адресации (регистр-регистр и регистр-память), и если я правильно разобрался со справочником, то скорость их выполнения на пентиум-1 будет 1 и 2 такта соотв.
почему разная длина:
код операции 000100xxb и там, и там,
в (3) самый правый бит=1, это говорит что будем иметь дело с 16-битным регистром.
(а вот что будет если он =0 -> 12D9 adc bl,cl )
в (3) второй справа бит=1, это говорит что код источника - в поле р/м, код приёмника - в поле рег/коп (см разбор второго байта), вот что будет если этот бит=0 -> 10D9 adc cl,bl.
приступим ко 2-му байту d9h (11011001b):
первые два (с лева) бита (это поле называется MOD) равны 11b, значит операнды в регистрах. Далее идёт поле рег/коп (так в учебнике, как по английски не помню), оно занимает 3 бита и равно 011b=код регистра bx (или bl, или ebx), след. поле р/м равно 001b, это код регистра ecx/cx/cl. Т.к. ранее указано что регистры будут 16-битные, то в команде будут регистры bx и cx. Т.о. команда из 2-х байт: первый - код операции, второй указывает 2 операнда - 2 регистра.
команда (9) - 67h=префикс смены 16/32битной адресации, 66h-префикс смены 16/32битной размерности команд, 13h -код операции, 1Ch- байт адресации, он указывает операнды (регистр и память, а ещё в этом примере он указывает что будет ещё один байт адресации), 81h - байт дополнительной 32-битной адресаци - байт SIB.
итак, в (9) надо указать больше информации про адреса, поэтому и размер больше (а ещё из-за префиксов)
почему разные способы адресации:
потому что иногда нам надо один способ, а иногда другой - для этого предусмотрены разные способы.
почему разная скорость выполнения:
потому что обратиться к регистру быстрее, чем к ячейке памяти; потому что для ячейки памяти надо вычислять адрес; а вообще я сам точно не знаю.
кроме того, для одной команды (например, ADC) может быть несколько разных
кодов операции: 14w, 80sw /2, 10dw (см. команды 1-9)
я советую вам почитать учебники, посмотреть в справочниках - там есть про строение команд процессоров и скорости выполнения команд. Подробнее всего про структуру команд пентиум написано конечно у разарботчика -что-то вроде "Intel Architecture Software Developer’s Manual Volume 1-Basic Architecture 24319002.pdf", а также Volume 2, они должны быть на сайте Intel. Вот только они на английском...
будут ещё вопросы - спрашивайте.
удачи!
Ответ отправил: Вiктор (статус: 3-ий класс)
Отправлен: 17.04.2005, 13:27


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

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

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

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

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


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


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


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

В избранное