2017-03-27 15 views
1
나는이 질문은 8051 년 어셈블리 언어에 새로운 해요

: enter image description here스택 추적

내가 40H에 주소의 값을 알고, 41H, 42H, 43H, 44H는 10H, 0DH, 10H, 10H, F0H이다.

하지만 나는 그 값을 손으로 어떻게 얻을 수 있는지 알지 못합니다. 나는 push가 먼저 SP를 1 씩 증가시킨 다음 SP로 지정된 RAM에서 주소로 데이터를 복사한다는 것을 압니다. 그러나, 나는 40H가 가치 10H를 가질 수는 있지만 나중에 어떻게 진행해야할지 모른다.

도움을 주시면 대단히 감사하겠습니다.

답변

1

물론 다른 스택 작업도 추적하면됩니다. 다음에 call은 리턴 주소를 스택 (100Dh, 리틀 엔디안에서는 0Dh 10h)에 놓습니다. push acc10h, 그 다음은 push b이며, 물론 0F0h을 씁니다.

0

스택을 사용하는 프로그램의 모든 후속 지시를 따라야합니다 (해당 명령어가 실행되는 순서대로).

1. 밀어 넣기 --- 10H를 스택 (위치 40h)에 넣습니다. 2. 호출 --- 스택에 반환 주소를 둡니다 (예 : 주소 0x100D). 리틀 엔디안 순서로 스택. 따라서 위치 41h에서 0Dh, 위치 42h에서 10h)

이제 jmp 명령이 실행되지 않습니다. 대신, 호출 명령 때문에 제어가 a_x_b_plus1로 전달됩니다.

따라서 3. 밀어 넣기 --- 다시 10H를 스택 (위치 43h)에 넣습니다. 4. b ---를 눌러 스택에 F0h를 놓습니다 (위치 44h).