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

Success OpNumber(long ea,int n)

Функция отображает операнд (операнды) в форме исчисления принятой по умолчанию. По умолчанию системой исчисления по умолчанию назначена шестнадцатеричная система исчисления.

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

seg000:0000 mov ax,65

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

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

b) вызов функцию OpNumber для преобразования второго слева операнда в систему исчисления по умолчанию.

seg000:0000 mov ax, 41h

с) результат – второй слева операнд преобразован в шестнадцатеричный вид

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

аргумент

пояснения

ea

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

n

=n

операнд

==0

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

==1

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

==‑1

все операнды

return

=return

пояснения

==1

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

==0

ошибка

Родственные функции: OpBinary, OpOctal, OpDeciminal,. OpHex, OpChr.

Интерактивный анлог: «Edit\Operand types\ Number»; <#>

Success OpOff(long ea,int n,long base)

Функция отображает операнд (операнды) в виде смещения относительно заданного сегмента, автоматически создавая автогенерируемую метку по целевому адресу (если целевой адрес не имеет метки) и перекрестную ссылку соответствующего типа (см. главу «Перекрестные ссылки»). Разрядность операнда, представляемого в виде смещения, должна быть равна разрядности соответствующего сегмента, иначе функция возвратит ошибку.

Аргумент ea задает линейный адрес элемента, которому принадлежит операнд.

Аргумент base задает базовый адрес сегмента, выраженный в байтах (не параграфах!) относительного которого отсчитывается смещение.

Аргумент n задает операнд, отображаемый в виде смещения (см. таблицу).

Для выполнения обратной операции, т.е. преобразованию смещения к непосредственному значению, достаточно передать функции нулевой базовый адрес сегмента.

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

seg000:0100 start proc near

seg000:0100 mov ah, 9

seg000:0102 mov dx, 108h

seg000:0105 int 21h

seg000:0107 retn

seg000:0107 start endp

seg000:0107

seg000:0107 ; ──────────────────────────────────────────

seg000:0108 db 'Hello,World!',0Dh,0Ah,'$

seg000:0108 seg000 ends

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

OpOff(SegByName("seg000")+0x102,1,SegByName("seg000"));

b) вызов функции OpOff для отображения константы, загружаемой в регистр DX в виде смещения относительно текущего сегмента

seg000:0100 start proc near

seg000:0100 mov ah, 9

seg000:0102 mov dx, offset asc_0_108 ; "Hello,World!\r\n$"

seg000:0105 int 21h

seg000:0107 retn

seg000:0107 start endp

seg000:0107

seg000:0107 ; ──────────────────────────────────────────────────────────

seg000:0108 asc_0_108 db 'Hello,World!',0Dh,0Ah,'$' ; DATA XREF: start+2o

seg000:0108 seg000 ends

с) результат – константа, загружаемая в регистр DX отображена в виде смещения, предваренного директивой “offset”, автоматически создана метка и перекрестна ссылка (в тексте они выделены жирным шрифтом).

Ближайший аналог (~Edit\Operad types\Offset by any segment)

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

аргумент

пояснения

ea

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

n

=n

пояснения

==0

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

==1

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

==-1

все операнды

base

базовый адрес сегмента, выраженный в байтах (не параграфах!) относительного которого отсчитывается смещение

return

=return

пояснения

==1

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

==0

ошибка

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

Интерактивный аналог: “~Edit\Operad types\Offset by any segment”; <Alt-R>

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