Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 [ 44 ] 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140

long GetOpType (long ea,long n)

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

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

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

тип операнда

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

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

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

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

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

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

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

Intel 80x86

тип операнда

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

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

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

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

MMX регистр

8051

тип операнда

80196

тип операнда

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

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

тип операнда

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

MLA-операнд

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

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

LDC/STC

Power PC

тип операнда

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

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

SH & MB & ME

поле

TMS320C5

тип операнда

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



тип операнда

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

тип операнда

условие

Таблица 15

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

seg000:0000 mov ax, 9

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

Message(">%x, %x\n",GetOpType(SegByName("seg000"),0), GetOpType(SegByName("seg000"),1));

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

>1,5

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

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

аргумент

пояснения

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

пояснения

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

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

return

=return

пояснения

>1

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

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

==BADADDR

ошибка

Родственные функции: GetOpnd, GetOperandValue Интерактивный аналог: нет

longGetOperandValue(long ea,long n)

Функция возвращает значение непосредственного операнда, принадлежащему элементу кода (не данных!), т.е. типу #5 (см. описание функции GetOpType). Пример использования:

seg000:0000 mov ax, 9

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

Message(">%x\n",GetOperandValue(SegByName("seg000"),1));

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



аргумент

пояснения

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

пояснения

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

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

return

=return

пояснения

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

ошибка

Родственные функции: GetOpnd, GetOpType Интерактивный аналог: нет

long FindVoid (long ea,long flag)

Функция ищет ближайший к переданному ей линейному адресу ea операнд типа "void", возвращая в случае успешного завершения поиска адрес головы элемента кода, которому он принадлежит. В зависимости от флага направления поиск может идти как вперед (от младших адресов к старшим), так и назад (от старших адресов к младшим). Переданный функции линейный адрес в этот диапазон поиска не входит и не обязательно должен принадлежать какому-нибудь сегменту.

Аргумент flag задает направление поиска - если его младший бит установлен поиск идет от младших адресов к старшим и, соответственно, наоборот.

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

seg000:0100 mov ax, 9

seg000:0103 mov dx, 133h

a) исходные данные - требуется получить линейный адрес элемента, содержащего операнд типа "void"

Message(">%s\n",atoa(FindVoid(0,1)));

b) вызов функции FindVoid - адрес начала поиска равен нулю, единичное значение флага направление указывает вести поиск с увеличением адресов

>seg000:0103

результат - линейный адрес элемента, содержащего операнд типа void, найден ??? #Верстальщику - change table

аргумент

пояснения

линейный адрес начала поиска, не обязательно принадлежащий какому-нибудь сегменту

flag

=flag

пояснения

прямое направление поиска

обратное направление поиска

return

=return

пояснения

!=BADADDR

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

с) результат - значение непосредственного операнда ??? #верстальщику - change table



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 [ 44 ] 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140