2017-02-07 5 views
2

각 명령에 대한 정확한 결과를 설명 할 수 있습니까? LDA, ROL, STA가 결과를 제공합니까?LDA/ROL/STA - 지침 설명

C=1 (carry flag is 1) 

LDA A #$08 0008 | 01 
ROL A  0009 | 02 
STA A $10 000A | 03 // A result is $11 
      000B | 04 
      000C | 05 

나는이 생각 : 그것은 올바른 설명

LDA A #$08 0008 - Store 0000 into memory 
ROL A  0009 - Get a data 0x08 from accumulator 0000 0100 add carry +1 = 0000 1011 
STA A $10 000A - get a result 0000 1011 = $11 

인가?

답변

4

는 꽤 목록을 이해하지 않지만, 다음과 같이 명령이 작동 : 누적으로

LDA #$08 부하 $ 08,로드 된 값에 따라 N 및 Z 플래그를 설정.

ROL A은 누적기를 왼쪽으로 1 비트 회전하고 이전 캐리 플래그를 비트 0에 넣고 이전 비트 7을 캐리 플래그에 넣습니다. $ 08은 왼쪽으로 1 비트 이동 한 $ 10이고, carry 플래그가 1이므로 끝 값은 $ 11입니다. (N 및 Z 플래그는 새로운 결과에 따라 설정됩니다.)

STA $10은 누적 기의 값을 주소 $ 10의 메모리에 저장하므로 누적 기는 변경되지 않습니다. 플래그는 영향을받지 않습니다.

은 (그것은 LDA A #$08 같은 것을 작성하는 보통이 아니다 -. A는, LDA는 L OA D에 대한 짧은되는 니모닉에서 알려진 관련되어 있다는 사실을 ccumulator ROL A, 다른 한편으로는, 인 그 ROL도 액세스 할 수 있기 때문에 메모리처럼 기록 된 6502 어셈블리 언어 구문은 바로 현대의 기준으로 매우 일치하지 않습니다)

6502.org가 좋은 참고 자료 -.. 예를 들어, http://www.6502.org/tutorials/은. 다른 시스템에서 어셈블리 언어 프로그래밍을 수행했다면 데이터 시트 (예 : https://en.wikipedia.org/wiki/MOS_Technology_6502#Further_reading)에서 처리하는 것이 좋습니다.

1

톰이 좋은 설명을했습니다. 일부 어셈블러는 누적 기 (예 : ROL A)에서 연산을 위해 "A"를 사용하고 일부에서는 (ROL 만) 사용하지 않는다고 추가합니다. - 단지를 통해 단계 및 각 명령의 효과를 볼

SEC  ;I added this to set C=1 
LDA #$08 ;Loads immediate value 08 into A and sets status flags (as every instruction does) 
ROL  ;Rotates (like a shift) A left through the carry, so C=0, A=0x11 
STA $10 ;Stores A into memory address $10, so $10=11 

당신은 디버거가 다양한 시뮬레이터 또는 에뮬레이터에서 프로그램을 테스트 할 수 있습니다

그래서 여기에 댓글을 달았습니다 분해합니다. 그것은 배우는 가장 좋은 방법입니다.

위의 해체를 복사하여 here에 붙여 넣으십시오. "어셈블"을 클릭하고 "디버거"확인란을 선택하고 "단계"를 클릭하십시오. 웹 페이지는 내장 된 시뮬레이터로 6502 프로그래밍을 가르치기위한 전자 서적입니다.

this simulator here은 그렇게 나쁘지 않습니다.

Clicking this link은 모든주기를 보여주는 고급 시뮬레이터에 프로그램을로드합니다.

물론 명령 줄에서 상호 작용하여 어셈블리를 입력 한 다음 에뮬레이터를 사용하여 디버깅 할 수있는 여러 가지 다른 다운로드 가능한 에뮬레이터가 있습니다. 이것은 조금 더 학습을 필요로하지만, 가치가있을 수도 있습니다. 예 : AppleWin은 사용하기 쉽기 때문에 합당한 선택입니다.

+0

감사합니다. 이것은 더 좋다. –