2014-10-06 2 views
1

주소 00에 숫자 1f이 저장되어 있고 01에 다른 숫자 1e가 저장되어 있습니다. 이제 을 1f00으로 만들고 1e001e으로 만들고 싶다면 1f1e이되도록 추가하십시오. 어떻게해야합니까? 나는 명령 asllsr을 알고 있지만, 저는 6502 초보자입니다. 그래서 누군가가 저에게 어떻게 효율적으로 (최소한의 사이클 량) 완료되었는지를 보여줄 수있어서 정말 고맙겠습니다.6502 어셈블리 쉬프트 비트

+7

는 8 비트 컴퓨터입니다, 당신은 직접 16 개 비트 숫자 작동하지 않을 수 있습니다. 두 개의 반쪽을 개별적으로 조작 할 수 있으며 교대는 필요하지 않습니다. – Jester

+0

@Jester '1f1e'에 무언가를 저장하고 싶다면'sta ($ 00), y'를 사용해야합니까? – Meteorite

+3

예,하지만 6502가 리틀 엔디안이라는 것을 기억하십시오. 따라서 '1f1e'을 얻으려면 2 바이트를 교환해야합니다. 물론'x '가 0이라면'sta ($ 00, x)'를 사용할 수도 있습니다. – Jester

답변

2

16 비트 수량으로 작업하는 경우 변수가 16 비트 또는 2 바이트인지 확인해야합니다.

특히 변수를 주소로 사용할 수있는 경우 6502 리틀 엔디안 주문을 사용하는 것이 좋습니다. 이는 낮은 바이트, 높은 바이트 주문을 의미합니다.

주소 00에 저장 1F 내가 번호를 가지고, 내가 당신은 정말 주소 $ 00- $는 01에서 저장 $ 001F를 갖고 싶어 다른 번호 1E 주소 01

에 저장이 ($ 00와 동일합니다 # $ 1F 및 $ 01은 # $ 00과 같음) $ 001E는 $ 02- $ 03 주소에 저장됩니다 ($ 02는 # $ 1E와 같고 $ 03은 $ 00과 같음). 그렇다면 다른 변수가 결과를 보유하기를 원할 것입니다. $ 04- $ 05라고합시다.


, 당신은 정말 두 개의 8 비트 변수를 가지고 있고 (선명도 레이블 사용) 가정 ... 16 비트 변수로 "변환"

하려면 :

을 $ 00 - 첫 번째 8 비트 변수 (라벨 VAR_A_8)

$ - 01 번째 8 비트 변수 (라벨 VAR_B_8)

$ 02- $ 03 - 당신을 배치 할 첫 번째 8 비트 변수 (라벨 VAR_A_16)

$ 04- $ 05 변환 - 당신이 두 번째를 배치 할 위치를 변환 8 비트 변수 (라벨 VAR_B_16)

들이 부호가 있습니까이? 그렇다면 LDA #$00, STA VAR_A_16, STA VAR_B_16, LDA $00, >STA VAR_A_16, LDA $01, STA >VAR_B_16입니다.

들이 을 서명 -

> 공통 어셈블러 구문 (나는 항상에 혼동있어 실제로 < 될 그것은 ) "의 하위 바이트"를 의미하는 것입니다? 8 비트 값이 음수이면 (비트 7 세트) 새 바이트에 $ FF를 저장하고 그렇지 않으면 $ 00을 저장하려고합니다.

한 가지 방법 : 6502 년부터

   LDX #$00 
       LDA VAR_A_8  ;Loading .A will set N flag in .P if bit 7 is set 
       BPL VAR_A_NOT_NEG 
       DEX    ;.X will now be $FF 
VAR_A_NOT_NEG: STX <VAR_A_16  ;store .X in high byte 
       STA >VAR_A_16  ;copy low byte 
       LDX #$00 
       LDA VAR_B_8 
       BPL VAR_B_NOT_NEG 
       DEX 
VAR_B_NOT_NEG: STX <VAR_B_16 
       STA >VAR_B_16 
1

6502는 8 비트 컴퓨터입니다. 하위 주소로부터 최하위 바이트를 판독함으로써 16 비트 양을 구성한다 (즉, 리틀 엔디안이다). 02를 해결하기 1f를 이동하거나 다른 수단에 의해, 현재의 레이아웃 대 주위를 전환하여 -

당신은 그러므로 단지 1f 전에 주소로 1e을 넣어해야합니다. 시프 팅이나 ORing이 필요하지 않습니다. 실제로 6502에는 16 비트 레지스터가 없으며 비트 논리로 이동하거나 조작 할 수 있습니다.

두 바이트가 0001에 보관되어 있지만 반전 된 경우 예 : x을 제로화하고 주소 지정 모드 ($00, x)을 사용하여 1f1e에 액세스하십시오.