Анимация
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

1. эксперимент

seg000:0000 db ? ; unexplored

seg000:0001 db ? ; unexplored

seg000:0002 db ? ; unexplored

seg000:0003 db ? ; unexplored

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

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

b) вызываем функцию MakeDword для создания нового элемента данных типа двойное слово, передавая ей адрес цепочки из четырех бестиповых байта

seg000:0000 dd ?

>1

c) результат - элемент данных типа двойное слово успешно создан

2. эксперимент

seg000:0000 db ? ; unexplored

seg000:0001 db ? ; unexplored

seg000:0002 dw ?

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

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

b) вызываем функцию MakeDword для создания нового элемента данных типа двойное слово, передавая ей адрес бестипового байта

seg000:0000 db ? ; unexplored

seg000:0001 db ? ; unexplored

seg000:0002 dw ?

>0

c) результат - функция завершилась с ошибкой, т.к. для создания нового элемента не достаточно места - по адресу seg000:0002 находится элемент данных типа слово, который не может быть автоматически присоединен к двойному слову. Для выполнения преобразования его необходимо уничтожить вызовом MakeUnkn

MakeUnkn(SegByName("seg000")+2,0);

d) вызываем функцию MakeUnkn для удаления элемента данных, расположенного по адресу "seg000:0002"

seg000:0000 db ? ; unexplored

seg000:0001 db ? ; unexplored

seg000:0002 db ? ; unexplored

seg000:0003 db ? ; unexplored

e) резултат - элемент данных успешно разрушен.

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

f) повторно вызываем функцию MakeDword, на этот раз передавая ей адрес цепочки из четырех бестиповых байт

seg000:0000 dd ?

>1

g) результат - элемент данных типа слво успешно создан ??? #Верстальщику - change table

аргрумент пояснения



линейный адрес бестипового байта или головы элемента данных

return

=return

пояснения

успешное завершение

ошибка

Родственные функции: MakeByte, MakeWord, MakeQword, MakeFloat, MakeDouble, MakePackReal, MakeTbyte.

Интерактивный аналог: "~Edit\Data"; <D>

success MakeQword(long ea)

Функция создает по переданному ей линейному адресу ea элемент данных типа четвертное слово, длиной восемь байт. Порядок следования младших и старших байт зависит от выбранного процессора. На микропроцессорах серии Intel 80x86 младший байт располагается по меньшему адресу и, соответственно, наоборот.

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

Ошибка возвратится и в том случае если по переданному функции линейному адресу находится хвост элемента данных, голова или хвост элемента кода.

Если хотя бы один из двух байт имеет неинициализированное значение, все двойное слово приобретает неинициализированное значение.

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

seg000:

0000

; unexplored

seg000:

0001

; unexplored

seg000:

0002

; unexplored

seg000:

0003

; unexplored

seg000:

0004

; unexplored

seg000:

0005

; unexplored

seg000:

0006

; unexplored

seg000:

0007

; unexplored

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

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

b) вызываем функцию MakeQword для создания нового элемента данных типа четвертное слово, передавая ей адрес цепочки из восьми бестиповых байта

seg000:0000 dq ?

>1

c) результат - элемент данных типа четвертное слово успешно создан ??? #Верстальщику - change table

аргрумент

пояснения

линейный адрес бестипового байта или головы элемента данных

return

=return

пояснения

успешное завершение



==0 I ошибка

Родственные функции: MakeByte, MakeWord, MakeDword, MakeFloat, MakeDouble, MakePackReal, MakeTbyte.

Интерактивный аналог: ("~Options\Setup data types"; <Alt-D>), <Q>

Замечение: для включения типа «четвертного слова» в список типов данных, пролистываемых нажатием клавиши <D>, необходимо, вызвав диалог "Setup data types" установить галочку напротив пункта "Quadro word".

success MakeFloat(long ea)

Функция создает по переданному ей линейному адресу ea элемент данных типа float, длиной четыре байта. Представление типа float завис от выбранного процессора. На микропроцессорах серии Intel 80x86 он имеет следующее строение (см. рисунок ???)

Порядок (8бит)

Мантисса (23 бита)

Рисунок 23 Представление типа float на микропроцессорах серии Intel 80x86

Если по данному адресу находится голова ранее созданного элемента данных, функция преобразует его в двойное слово типа float, а хвост элемента (если он есть) - в бестиповые байты. Если размер элемента недостаточен для преобразования, но следом за его хвостом находятся бестиповые байты, они будут автоматически присоединены к новому элементу. В противном случае, если следом за его хвостом находится другой элемент или не находится ничего, функция возвратит ошибку, не выполнив преобразования. Для выполнения преобразования необходимо предварительно уничтожить мешающие элементы вызовом MakeUnkn (см. описание функции MakeUnkn).

Ошибка возвратится и в том случае если по переданному функции линейному адресу находится хвост элемента данных, голова или хвост элемента кода.

Если хотя бы один из четырех байт имеет неинициализированное значение, все двойное слово приобретает неинициализированное значение.

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

seg000:

0000

48h ;

seg000:

0001

65h ;

seg000:

0002

6Ch ;

seg000:

0003

6Ch ;

seg000:

0004

6Fh ;

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

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

b) вызываем функцию MakeFloat для создания нового элемента данных типа float, передавая ей адрес цепочки из четырех бестиповых байта

seg000:0000 dd 1.1431391e27

>1

c) результат - элемент данных типа float успешно создан ??? #Верстальщику - 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