2013-06-02 2 views
1

어셈블리 프로그래밍의 기본 사항을 다시 배우고 있습니다. 나는 천천히 Assembly Language Step-by-Step: Programming with Linux을 통해 내 길을 가고있다.NASM 어셈블리 프로그래밍 - 어드레스 증분

저는 NASM을 사용하는 64 비트 Slackware 머신 (x86-x64)에서 작업하고 있습니다.

나는 주소를 증가시키는 것이 무엇을 의미하는지 혼란 스럽다. 내 bss 섹션에는 Buffer resb 4096 버퍼가 있습니다. text 섹션에서 나는 esi에 주소를 할당 :

mov esi, Buffer 

나중에, I inc esi. 이것은 esi을 다음 바이트 오프셋으로 전진하는 것으로 나타납니다. 나는 조금 놀랐다 - 나는 그것이 32 비트 레지스터이기 때문에 esi이 4 바이트를 앞당길 것으로 예상했다.

주소를 증가 시키면 한 번에 한 바이트 씩 이동한다고 가정 할 수 있습니까? 내가 add esi, 4을 사용하여 32 비트를 향상시킬 수 있습니까?

32 비트 레지스터를 채울 때 4 바이트를 명시 적으로 요청해야합니까? mov eax, DWORD [esi]과 같은 것?

답변

3

% esi는 레지스터입니다. 주소, 은행 계좌 잔액 또는 다른 것을 포함 할 수 있습니다. cpu가 어떤 종류의 값을 포함하는지 알 수있는 방법은 없습니다. inc은 단순히 4

그것은 당신이 할 때 다르다 추가 그래서 1

32 비트하여 증가 할 경우 그래, 당신이 한에 의해 레지스터에 저장된 값을 증가 산술 명령어입니다 로드 및 저장에서 선택할 레지스터 (% al 또는 % eax)는로드/저장 크기를 나타냅니다. 모호한 점이 있거나로드/저장소의 크기를 변경하려면 size 한정자 (단어/워드 등)를 사용해야합니다.

+0

실제로 내가하는 일이 훨씬 쉬워졌습니다. 나는 한 번에 4 바이트를 처리해야 할 것이라고 염려했다. –

관련 문제