2015-01-31 4 views
1

나는 (나를 위해 : D) 어려운 시험을 치고 '$'문자의 의미를 찾을 수 없습니다. 예를 들어, 다음 코드를 가지고 있습니다.

DATA SEGMENT 
vector db 00h,10h,20h,30h,40h 
     db 50h,60h,70h,80h,90h 
lv  equ ($ - vector)/TYPE vector 

누군가가 lv의 가치를 말해 줄 수 있습니까?

+0

어떤 어셈블리 언어입니까? 그것은 다른 ASM에서 다른 의미를 가지고 있습니다. – Mints97

+0

이것은 현재의 메모리 오프셋을 나타 내기 위해 사용될 수있는 것처럼 보입니다. 단지 추측 일뿐입니다 ... – Mints97

+0

우리는 I8086 프로세서를 사용하고 있습니다 ... 그리고 컴파일하는데있어 MASM을 사용하고 있습니다. D – Valeriu92

답변

4

$에는 현재 명령어가있는 주소가 포함됩니다.

lv의 값은 vector 데이터의 항목 수입니다. 표현식 ($ - vector)vector 레이블에서 $이 사용 된 코드의 위치, 즉 lv이 선언 된 바이트 수를 계산합니다.

길이는 vector에서 사용되는 데이터 크기로 나뉩니다.

lv equ ($ - vector)/TYPE vector

: 대신 바이트의 열 개 단어가 있다면 그것은 차지하는 20 바이트 2.

+0

고마워, 이건 내가 알아야 할 필요가 무엇입니까 – Valeriu92

+0

아, 그것을 이길! = D – Mints97

2

으로 나눈 것으로, 다음 lv 아직도 내가 마지막 부분 확신, 10이 될 것입니다 벡터 배열의 요소 수를 가져와야합니다. 전체 코드는 C에 다음과 거의 동등하다 :

int vector[10] = {0x00,0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80,0x90}; 
int lv = sizeof(vector)/sizeof(vector[0]); 

설명 : MASM에서 $ 오프셋 현재 메모리를 나타낸다. 나는. 당신은 메모리에 vector 어레이를 채웠고 메모리 오프셋은 끝나는 곳에서 바로 나타납니다. 따라서 $ - vector은 배열에 대한 포인터를 현재 오프셋에서 뺍니다. 이로 인해 배열의 크기가 효과적으로 지정됩니다. MASM에서

,

타입 연산자는 어레이의 각 요소의 크기 (바이트)를 반환한다.

(인용구 : http://www.c-jump.com/CIS77/ASM/Instructions/lecture.html - 좋은 MASM 문서 인 것처럼 보입니다.) 나는. 그것은 C의 sizeof(vector[0]);과 같습니다.