2011-08-31 3 views
3

내가 배우는 어셈블리에 대해 몇 가지 질문이 있는데 혼란 스럽습니다.x86 레지스터 이름, 주소 지정 모드, 위치 변경 및 저장소

  1. bxbpsssp의 차이점은 무엇입니까? 책에서는 bx이 기본 레지스터이고 bp은 기본 포인터라고합니다. 이것은 그들이 똑같은 것을 의미합니까?
  2. mov ax, bx, mov ax, [bx], mov ax, bpmov ax, [bp]의 차이점은 무엇입니까?
  3. disp은 인덱싱 된 주소 지정 모드에서 무엇을 의미합니까? 예 : mov al, disp[bx]? 또는 mov al, disp[si]? 이 책은 의미를 설명하지 않는다 disp.
  4. 레지스터가 CPU가 아닌 RAM에 있습니까?

    제 영어를 용서하십시오. 제 첫 langugage가 아닙니다.

+4

질문 당 하나의 질문 만하십시오. 사람들이 귀하의 질문 중 일부만 대답하기 시작하면 귀하의 질문에 대한 답변이 있었는지 아닌지를 말하기가 어렵습니다. 하나 이상의 물어볼 질문이 있으면 여러 질문을 동시에 열어보십시오. 따로 보관 해주세요. – bdonlan

답변

8

오 마이어스,이 16 비트 레지스터는 1984 년에 완전히 쓸모 없게되었습니다. 오래된 책이 있습니다. 그럼에도 불구하고 현대 프로세서는 여전히 이러한 것들을 사용하므로 귀하의 질문에 맞는 것입니다. 실제로 일부 16 비트 어셈블리를 다시 작성했으며 이상하게도 그것을 기억합니다. Yikes.

  1. BX, BP, SS 및 SP는 단지 4 개의 개별 레지스터입니다. BX, BP 및 SP는 범용 레지스터이며 (다른 16 비트 GPR은 AX, CX, DX, SI 및 DI입니다.) SS는 너무 자주 사용하지 않는 세그먼트 레지스터입니다 (암시 적으로 BP와 SP를 참조하십시오). 이 각각의 레지스터가 무엇인지에 대한 완전한 대답은 일반적인 SO 응답보다 훨씬 많은 공간을 차지합니다. 하지만 귀하의 특정 질문에 대답하기 위해 BX와 BP는 서로 다른 레지스터가 아니라 동일한 레지스터입니다. BP는 일반적으로 스택 프레임을 인덱싱하는 데 사용되며 BX는 일반적으로 구조 나 배열을 인덱싱하는 데 사용됩니다.

  2. MOV AX, BX은 BX의 내용을 AX로 이동하고 MOV AX, [BX]은 값이 DS : BX 인 메모리 위치의 내용을 AX로 이동합니다. 즉, BX에 값 500이 들어있는 경우 첫 번째 명령어는 500을 AX로 이동시키고 두 번째 명령어는 주소 500의 내용 (세그먼트 DS의 시작 부분에서 기술적으로 500 바이트)을 AX로 이동합니다. (이와 같은 MOV 명령어가 MASM 및 NASM과 같이 다른 어셈블러에서 해석되는 방식에는 약간의 차이가 있습니다.)

  3. DISP는 단순히 "displacement"의 약어이며, 레지스터를 사용하여 스택 프레임의 변수 주소 나 구조의 요소와 같은 값을 계산합니다. MOV AX, [BX+25]과 같은 명령에서 25가 변위입니다.

  4. 예, 레지스터는 CPU의 일부입니다.

+0

대단히 감사합니다! 'bx'와'bp'의 차이를 명확히하기 위해 읽을 수있는 기사가 있습니까? 다시 한번 감사드립니다! ^^ upvote까지 4 번 더 : P –

+0

필요한 것을 얻을 수있는 기사 : http://en.wikipedia.org/wiki/X86#16-bit, http://en.wikibooks.org/wiki/X86_Assembly/ 16_32_and_64_Bits # The_8086_register, http://en.wikibooks.org/wiki/X86_Assembly/X86_Architecture#General-Purpose_Registers_.28GPR.29 –

2

4 : x86 아키텍처에서, 레지스터는 CPU에 참으로와 RAM의 하지. 좋아요, 저는 레지스터가 CPU에 나타나지 않는 1970 년 이후의 아키텍처는 모르지만 레지스터가 RAM과 동일한 주소 공간에있는 아키텍처 (예 : 8051)를 알고 있습니다 - 또는 적어도 레지스터는 하위 주소 공간입니다. RAM에 액세스하는 명령어는 똑같은 명령어 코드를 사용하여 레지스터에 쉽게 액세스 할 수 있으며 액세스가 RAM에 오프 칩으로 수행되거나 레지스터에 온칩으로 유지되는지 여부는 주소에만 의존합니다 익숙한.그러나 x86에서는 메모리 참조 명령어로 레지스터의 라이브 값에 액세스 할 수 없습니다. (명시 적으로 또는 암시 적으로 먼저 메모리에 저장하지 않는 한, 여기서는 이에 대해 언급하지 않습니다.)

관련 문제