Выражения на языке ассемблера
Обновлен: Ноябрь 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) |