2013-07-02 3 views
0

나는 의사 코드로 시작하는 아주 기본적인 어셈블리 언어를 배우고있다. 지시가 "10 (50)"으로 변환하는 경우기본 변위 주소를 계산하는 방법

: 메모리 위치 [50 + 10]으로 이동 - 즉, 이는

베이스 변위 주소이며 "50 @"명령하는 경우로 해석 : 메모리 위치 [[50]]로 이동합니다. 즉, [50]이 가리키는 것을 찾아서 (x라고 부름) [x]를 찾습니다.

"10 (@ 50")은 무엇을 의미합니까? 그 지시가 모호한 것처럼 보입니다. @ 50 부분과 을 해결 하시겠습니까? 변위를 추가 하시겠습니까? 또는 변위를 @ 50에 추가 한 다음 @ 60을 해결합니까? 당신이 제공 할 수있는 어떤 도움

감사합니다.

+0

어떤 어셈블러입니까? 어떤 칩에 대해 이것을 배우려고하십니까? 소스와 텍스트를 구별 할 수 있도록 글을 포멧 할 수 있다면 독자들에게 많은 도움이 될 것입니다. –

+0

어셈블러 나 칩을위한 것이 아닙니다. 그 수준 이전입니다. 기본적으로 내 질문은 : 기본 변위 주소 지정을 사용하면 먼저 기본 주소를 확인한 다음 변위를 추가합니까, 아니면 변위를 기준에 추가 한 다음 결과를 해결합니까? –

+0

누군가가 나를 조롱 할 수는 있지만, 내가 알고있는 가장 좋은 점은 그 답은 칩 자체에 달려 있다는 점입니다. 문제의 실제 레지스터와 오프셋을 사용한 구체적인 예가 나에게 도움이 될 것이다 (그리고 몇몇 다른 사람들, 나는 확신한다). –

답변

1

메모리가 맞다면 IA-32에서 [[50 + 10]]이되어야합니다. 마찬가지로 :

JMP DWORD PTR 10[50] ; Jump to the 32-bit address located at address 60 

후 인덱스 메모리 간접 그걸 해결의 하나의 예는 마음에 온다 당신이 (imm8),Y로 써서 6502입니다. 예를 들어

LDY #10 
LDA (50),Y ; Loads the 16-bit word at 50, adds the value of Y to it, and 
      ; uses the result as the effective address for an 8-bit load 
      ; into register A 

인덱스 레지스터 Y 판정 것을 유의; 그래서 LDA (50),10과 같은 것을 쓸 수는 없습니다.
사실, 나는 그런 어드레싱 모드를 포함하는 프로세서를 만나 본 적이 없다. 하나가 존재하지 않는다고 말하는 것이 아닙니다.

관련 문제