Поделиться через


Выражения на языке ассемблера

Обновлен: Ноябрь 2007

Этот раздел применим к:

Выпуск

Visual Basic

-c конец_команды

-c конец_команды

Web Developer

Express

Тема не применяется Тема не применяется

Только машинные коды

Тема не применяется

Standard

Тема не применяется Тема не применяется

Только машинные коды

Тема не применяется

Pro и Team

Тема не применяется Тема не применяется

Только машинные коды

Тема не применяется

Условные обозначения:

Тема применяется

Применяется

Тема не применяется

Не применим

Тема применяется, но команда по умолчанию сокрыта

Команда или команды, скрытые по умолчанию.

Отладчик может с некоторыми ограничениями правильно вычислять выражения на языке ассемблера. Синтаксис, используемый некоторыми выражениями языка ассемблера, отличается от используемого в системах разработки на языке ассемблера, таких как Microsoft Macro Assembler (MASM).

Операторы работы с памятью

Операторы работы с памятью — это унарные операторы, возвращающие результат операции прямого доступа к памяти. Они используются главным образом при отладке кода на языке ассемблера.

{BY | WO | DW} address

Оператор BY возвращает значение типа short integer, содержащее первый байт по заданному адресу. Этот оператор моделирует операцию BYTE PTR.

Оператор WO возвращает значение типа short integer, содержащее слово (два байта) по заданному адресу. Этот оператор моделирует операцию Microsoft Macro Assembler WORD PTR. Оператор DW возвращает значение типа long integer, содержащее первые четыре байта по заданному адресу. Этот оператор моделирует операцию DWORD PTR.

В некоторых из следующих примеров используется указатель формата x для отображения результата в шестнадцатеричном формате.

Примеры

  • Чтобы отобразить первый байт по адресу переменной sum, используйте следующий оператор:

    BY sum

  • Чтобы отобразить первое слово по адресу переменной new_set, используйте следующий оператор:

    WO new_set

  • Чтобы отобразить двойное слово по адресу переменной sum, используйте следующий оператор:

    DW sum

  • Чтобы отобразить байт, на который указывает адрес в регистре EBP со смещением 6, используйте следующий оператор:

    BY ebp+6,x

  • Чтобы отобразить слово, на которое указывает указатель стека (последнее слово, помещенное в стек), используйте следующий оператор:

    WO esp,x

  • Чтобы отобразить двойное слово, на которое указывает регистр ESI, используйте следующий оператор:

    DW esi,x

Косвенная адресация регистров

Отладчик не распознает квадратные скобки ([ ]) как обозначение ячейки памяти, на которую указывает регистр. Вместо этого используются операторы BY, WO, и DW, указывающие значения длиной в байт, слово и двойное слово соответственно.

Выражение MASM

Выражение отладчика

Выражение на языке C++

BYTE PTR [bx]

BY ebx

*(unsigned char) ebx

WORD PTR [bp]

WO ebp

*(unsigned short *) ebp

DWORD PTR [bp]

DW ebp

*(unsigned long *) ebp

Косвенная адресация регистров с замещением

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

Выражение MASM

Выражение отладчика

BYTE PTR [edi+6]

BY edi+6

BYTE PTR Test[ebx]

BY &Test+ebx

WORD PTR [esi][ebp+6]

WO esi+ebp+6

DWORD PTR [ebx][esi]

DW ebx+esi

Адрес переменной

Вместо оператора MASM OFFSET в выражениях отладчика следует использовать оператор взятия адреса из языка C (&).

Выражение MASM

Выражение отладчика

OFFSET Var

&Var

Оператор PTR

Вместо оператора языка ассемблера PTR следует использовать приведение типов или операторы BY, WO, и DW с оператором взятия адреса (&).

Выражение MASM

Выражение отладчика

BYTE PTR Var

BY &Var

*(unsigned char*)

&Var

WORD PTR Var

WO &Var

DWORD PTR Var

DW &Var

*(unsigned long*)

&Var

Строки на языке ассемблера

В выражениях отладчика после имени строковой переменной следует добавлять указатель формата строки ,s.

Выражение MASM

Выражение отладчика

String

String,s

Поскольку строки на языке C заканчиваются нулевым знаком (код ASCII 0), при запросе вывода строки отладчик отображает все знаки, начиная с первого байта переменной и до следующего нулевого байта в памяти. Если требуется провести отладку программы на языке ассемблера и необходимо просматривать строки в окне Контрольное значение, следует заканчивать строковые переменные нулевыми знаками. Простой способ просматривать строки с завершающим нулем и без него - с помощью окна Память.

Массив и элементы структуры

Перед именем массива следует указывать оператор взятия адреса (&) с прибавлением требуемого смещения. Смещение может быть задано выражением, числом, именем регистра или переменной.

В следующих примерах показано, как это выполняется для массивов байтов, слов и двойных слов.

Выражение MASM

Выражение отладчика

String[12]

BY &String+12*(&String+12)

aWords[bx+di]

WO &aWords+bx+di*(unsigned*)(&aWords+bx+di)

aDWords[bx+4]

DW &aDWords+bx+4*(unsigned long*)(&aDWords+bx+4)

См. также

Другие ресурсы

Выражения в машинном коде C++