2013-07-02 6 views
2

이 같은 메모리 위치에 액세스 할 수x86에 오프셋 쓰기 저장 기능이 있습니까? 팔

LDR r0, [r1, #4]! 

의미 I가되고, 값이 4 바이트 오프셋으로, R1에 의해 지시로드 할! 새로운 값 (즉, +4)으로이 명령어 뒤에 r1 값을 업데이트하려고 함을 의미합니다.

가능한 경우 x86 신원 (& T 구문)에 해당하는 기능이 있습니까? 예 :

이렇게하면 % eax에서 가리키는 값이 4 바이트 오프셋을 사용하여 % eax에로드됩니다. 로드 후 % ebx 값을 어떻게 업데이트합니까?

감사합니다.

+0

당신은'4 (% ebx)'라고 생각합니까? 그 외에, 인텔이 자동 증가 어드레싱 모드를 가지고 있는지 나는 모른다. 문서를 잠시 살펴 보겠습니다 ... –

+0

4 (% ebx)가 (% ebx, 4)와 동일하지 않습니까? –

+0

내 어셈블러는'example.s : 3 : 인덱스 레지스터가없는 4의 축척 계수 '를 취하지 않습니다. –

답변

4

찾고있는 명령은 "문자열에서 DWORD로드"를 의미하는 LODSD이라고 생각합니다. 레지스터를 선택하지 않아도됩니다 : 포인터가 ESI이고 대상 레지스터가 EAX입니다.

바이트, 워드 후

또는 더블이 AL, AX 또는 EAX 레지스터로 메모리 위치로부터 전송되는 상기 (E) SI 레지스터 캘리의 설정에 따라 증가 또는 을을 자동적 감소된다 EFLAGS 레지스터의 DF 플래그 (DF 플래그가 0이면 SI 레지스터가 증가하고 DF 플래그가 1이면 ESI 레지스터가 감소합니다.) (E) SI 레지스터는 바이트 연산에 대해 1 씩 증가 또는 감소합니다 , 단어 작업의 경우에는 , 더블 워드 작업의 경우 4입니다.

죄송합니다. 지금 내 머리 속에 Intex 구문이 깔려 있습니다. 편평한 32 비트 보호 모드를 가정하십시오 :

mov esi, _source_data_  ; ESI points to source data 
cld       ; Clear the direction flag 
           ; (ESI will increment) 
lodsd       ; Essentially mov eax, [ds:esi] 
           ;    add esi, 4 
+0

위대한 - 감사합니다. 문서를 볼 수있게 해 줬어. +1! –

+0

니스, 고마워. –

+1

코드 예제가'a '없이'lodsd'라고해야합니까? – Michael