어셈블리 언어 식
업데이트: 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) |