주소 00
에 숫자 1f
이 저장되어 있고 01
에 다른 숫자 1e
가 저장되어 있습니다. 이제 을 1f00
으로 만들고 1e
을 001e
으로 만들고 싶다면 1f1e
이되도록 추가하십시오. 어떻게해야합니까? 나는 명령 asl
과 lsr
을 알고 있지만, 저는 6502 초보자입니다. 그래서 누군가가 저에게 어떻게 효율적으로 (최소한의 사이클 량) 완료되었는지를 보여줄 수있어서 정말 고맙겠습니다.6502 어셈블리 쉬프트 비트
답변
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
6502는 8 비트 컴퓨터입니다. 하위 주소로부터 최하위 바이트를 판독함으로써 16 비트 양을 구성한다 (즉, 리틀 엔디안이다). 02
를 해결하기 1f
를 이동하거나 다른 수단에 의해, 현재의 레이아웃 대 주위를 전환하여 -
당신은 그러므로 단지 1f
전에 주소로 1e
을 넣어해야합니다. 시프 팅이나 ORing이 필요하지 않습니다. 실제로 6502에는 16 비트 레지스터가 없으며 비트 논리로 이동하거나 조작 할 수 있습니다.
두 바이트가 00
및 01
에 보관되어 있지만 반전 된 경우 예 : x
을 제로화하고 주소 지정 모드 ($00, x)
을 사용하여 1f1e
에 액세스하십시오.
는 8 비트 컴퓨터입니다, 당신은 직접 16 개 비트 숫자 작동하지 않을 수 있습니다. 두 개의 반쪽을 개별적으로 조작 할 수 있으며 교대는 필요하지 않습니다. – Jester
@Jester '1f1e'에 무언가를 저장하고 싶다면'sta ($ 00), y'를 사용해야합니까? – Meteorite
예,하지만 6502가 리틀 엔디안이라는 것을 기억하십시오. 따라서 '1f1e'을 얻으려면 2 바이트를 교환해야합니다. 물론'x '가 0이라면'sta ($ 00, x)'를 사용할 수도 있습니다. – Jester