Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ida.final.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
6 Mб
Скачать

Char GetOpnd(long ea,long n)

Функция возвращает операнд в строковом виде, т.е. том виде, в каком дизассемблер отображает его на экране.

Пример использования:

seg000:0000 mov ax, 9

a) исходные данные – требуется получить операнды в том виде, в котором они отображены на экране.

Message(“>%s,%s\n”,GetOpnd(SegByName(“seg000”),0),

GetOpnd(SegByName(“seg000”),1));

b) вызов функции GetOpnd для получения операндов в том виде, в котором они отображены на экране

>ax, 0

c) результат

??? #верстальщику – change table

аргумент

пояснения

ea

линейный адрес элемента, которому принадлежит операнд

n

=n

пояснения

==0

первый слева операнд

==1

второй слева операнд

return

=return

пояснения

==1

операция выполнена успешно

==0

ошибка

Родственные функции: GetOpType, GetOperandValue

Интерактивный аналог: нет

Char AltOp (long ea,long n)

Функция возвращает операнд, определенный пользователем (см. описание функции OpAlt).

seg000:0000 mov Регистр AX, 9

a) исходные данные

Message(“>%s\n”,AltOp(SegByName(“seg000”),1));

b) вызов функции AltOp для получения операнда, опеределенного пользователем

>Регистр AX

c) результат – получен операнд, определенный пользователем

??? #верстальщику – change table

аргумент

пояснения

ea

линейный адрес элемента, которому принадлежит операнд

n

=n

пояснения

==0

первый слева операнд

==1

второй слева операнд

return

=return

пояснения

==1

операция выполнена успешно

==0

ошибка

Родственные функции: OpAlt

Интерактивный аналог: нет

Long GetOpType (long ea,long n)

Функция возвращает тип операнда (см. таблицу ???), принадлежащему элементу кода (не данных!). Тип операнда, за исключением типов определенных для всех процессоров, зависит от выбранного микропроцессора.

Тип операнда определяется не его представлением на экране, а инструкциями, в состав которых он входит. Так, например, при попытке определения второго слева операнда конструкции “mov dx,offset MyLabel” функция вернет тип непосредственное значение, несмотря на то, что он представлен в виде смещения.

Общие для всех процессоров

#

тип операнда

1

регистр общего назначения

2

ячейка памяти

3

базовый регистр + [индексный]

4

базовый регистр + [индексный] + смещение

5

непосредственное значение

6

непосредственный far-адрес

7

непосредственный near-адрес

Intel 80x86

#

тип операнда

8

386+ трассировочный регистр

9

386+ отладочный регистр

10

386+ контрольный регистр

11

Регистр FPP (сопроцессора)

12

MMX регистр

8051

#

тип операнда

8

бит

9

10

80196

#

тип операнда

8

[внутренняя память]

9

10

смещение[внутренняя память]

ARM

#

тип операнда

8

регистр сдвига

9

MLA-операнд

10

регистр (для LDM/STM)

11

регистр сопроцессора

CDP

12

LDC/STC

Power PC

#

тип операнда

8

регистр указателя стека

9

регистры плавающей запятой

10

SH & MB & ME

11

CR

поле

бит

TMS320C5

#

тип операнда

8

спарка регистров (A1:A0..B15:B14)

Z8

#

тип операнда

8

@внутренняя память

9

@Rx

Z80

#

тип операнда

8

условие

Таблица 15

Пример использования:

seg000:0000 mov ax, 9

a) исходные данные – требуется определить тип обоих операндов

Message(“>%x, %x\n”,GetOpType(SegByName(“seg000”),0),

GetOpType(SegByName(“seg000”),1));

b) вызов функции GetOpType для определения типов операндов

>1,5

с) результат – по таблице ??? определяем тип операндов – регистр общего назначения и непосредственное значение соответственно.

??? #верстальщику – change table

аргумент

пояснения

ea

линейный адрес элемента, которому принадлежит операнд

n

=n

пояснения

==0

первый слева операнд

==1

второй слева, третий (если он есть) и все остальные операнды

return

=return

пояснения

>1

тип операнда (см. таблицу ???)

==0

элемент не имеет операндов

==BADADDR

ошибка

Родственные функции: GetOpnd, GetOperandValue

Интерактивный аналог: нет

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]