다음을 통해 공유


어셈블리 언어 식

업데이트: 2007년 11월

이 항목은 다음 언어에 적용됩니다.

Edition

Visual Basic

C#

C++

Web Developer

Express

항목이 적용되지 않음 항목이 적용되지 않음

네이티브 전용

항목이 적용되지 않음

Standard

항목이 적용되지 않음 항목이 적용되지 않음

네이티브 전용

항목이 적용되지 않음

Pro 및 Team

항목이 적용되지 않음 항목이 적용되지 않음

네이티브 전용

항목이 적용되지 않음

표의 범례:

항목이 적용됨

해당

항목이 적용되지 않음

해당 없음

항목이 적용되지만 명령은 기본적으로 숨겨짐

명령은 기본적으로 숨겨져 있습니다.

디버거에서 어셈블리 언어 식을 정확하게 평가할 수는 있지만 몇 가지 제한이 있습니다. 일부 어셈블리 언어 식에 사용하는 구문은 MASM(Microsoft Macro Assembler)과 같은 어셈블리 언어 개발 시스템에 사용하는 구문과 다릅니다.

메모리 연산자

메모리 연산자는 직접 메모리 작업 결과를 반환하는 단항 연산자입니다. 이 연산자는 주로 어셈블리 언어 코드를 디버깅하는 데 사용됩니다.

{BY | WO | DW} address

BY 연산자는 주소에서 첫 번째 바이트가 포함된 short 정수를 반환합니다. 이 연산자는 BYTE PTR를 시뮬레이션합니다.

WO 연산자는 주소에서 워드(2바이트) 값이 포함된 short 정수를 반환합니다. 이 연산자는 Microsoft Macro Assembler의 WORD PTR 연산을 시뮬레이션합니다. DW 연산자는 주소에서 첫 번째 4바이트 값이 포함된 long 정수를 반환합니다. 이 연산자는 DWORD PTR를 시뮬레이션합니다.

다음 몇 가지 예제와 같이 형식 지정자 x를 사용하면 결과가 16진수로 표시됩니다.

예제

  • 변수 sum의 주소에서 첫 번째 바이트를 표시하려면 다음과 같이 지정합니다.

    BY sum

  • 변수 new_set의 주소에서 첫 번째 워드를 표시하려면 다음과 같이 지정합니다.

    WO new_set

  • sum의 주소에서 더블워드를 표시하려면 다음과 같이 지정합니다.

    DW sum

  • 6만큼 변위된 EBP 레지스터가 가리키는 바이트를 표시하려면 다음과 같이 지정합니다.

    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 문자열은 Null(ASCII 0) 문자로 끝나기 때문에, 사용자가 문자열을 표시하도록 요청하면 디버거가 변수의 첫 번째 바이트부터 메모리의 다음 Null 바이트까지 모든 문자를 표시합니다. 어셈블리 언어 프로그램을 디버깅하고 조사식 창에서 문자열을 보려면 Null 문자를 사용하여 문자열 변수를 구분해야 합니다. 메모리 창을 사용하면 null로 끝나는 문자열이나 종료되지 않은 문자열을 쉽게 볼 수 있습니다.

배열 및 구조체 요소

배열 이름 앞에 주소 연산자(&)를 추가하고 원하는 오프셋을 더합니다. 식, 숫자, 레지스터 이름 또는 변수를 오프셋으로 사용할 수 있습니다.

다음 예는 바이트, 워드 및 더블워드 배열에 대한 작업 방법입니다.

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++의 식