2014-03-12 4 views
1

저는 다시하고 있지만 이번에는 닫습니다. 6502 칩으로 작업하기.조립 인쇄 버퍼

어셈블리 인쇄 버퍼 프로그램을 작성하고 있습니다.

내가 겪고있는 한 가지 문제점은 문자열이 null인지 확인하는 것입니다.

여기 내 코드는 지금까지 있습니다 : (사람이 읽을 수있는)

내가 문자열이 null의 경우 확인 가겠어요 어떻게
buffer = $03ff 
x = $01 

[START]: $0500 

    LDX buffer  // load buffer (at safe memory address $03ff) 
    LDY #$00  // loading the y register with 0 so that you can count up 
       // checking for a null string; if null, branch to the break instruction 
LOOP: LDA buffer+1, y  // get byte using the buffer 
    STA (x), y // store the value at the pointer 
    INY   // increment y 
    DEX   // decrement x (counting down with the x register) 
    BEQ $500?  // if x is equal to 0, program is done 
    BNE LOOP:  // if x is not equal to 0, keep going 
    BRK    // if brk, it’s null 

?

감사합니다.

답변

1

은 아마 단지 첫번째 제로에 대한 명시적인 테스트를 수행합니다 시험 전에 X에 아무것도 할 필요가 없습니다 있도록

[START]: $0500 

    LDY #$00 
    LDX buffer 

    BEQ ENDOFLOOP 

LOOP: 
    LDA buffer+1, y 
    STA (x), y 
    INY 
    DEX 

    BNE LOOP 

ENDOFLOOP: 
    BRK 

LDX 제로 플래그를 설정합니다.

+0

감사합니다. 그래서 SUPER SUPER (정확한 2 일) 조립에 대한 초보자 질문 ...하지만 나는 BEQ 구문에 혼란스러워합니다. – Surz

+0

어셈블러에서 BEQ ENDOFLOOP을 넣을 수 있습니까? (어떤 메모리 주소에 혼란 스럽습니까? 그 메모리 주소를 입력하고 넣을 선의 수를 계산합니까? – Surz

+0

실제 기계 코드를 작성하는 경우 결론은 어디에서 끝내야할지 결정할 때 PC가있는 바이트 수입니다.하지만 어셈블러에 대해 신경 쓸 필요는 없습니다. 정확한 구문은 조금 다르지만 일반적으로 'LOOP :'와 같은 것입니다. 어셈블러가 라벨로 취급하고'BNE LOOP'는 그 라벨이 어디에 있든지간에 'BNE'를 의미 할 것이며 어셈블러는 정확한 바이트 수를 계산하여 여러분에게 채울 것입니다 – Tommy

0

난 그냥 전면에 비교를 이동할 것 ... 내 6502

... 
    LDY #$00 
LOOP: 
    LDA buffer+1, y 
    BEQ ENDOFLOOP: 
    STA (x), y 
    INY 
    DEX 
    JMP LOOP: 
ENDOFLOOP: 
    ... 

정말 녹슨입니다,하지만 당신은 아이디어를 얻을.

+0

null 문자열 경우는 어떻습니까? – Surz

+0

null 문자열은 어떻게 정의합니까? 버퍼의 머리가 null이거나 버퍼 주소가 $ 0000 인 곳을 언급하고 있습니까? – Joe

+0

문자열에 파스칼 정의를 사용하고 있습니다. 버퍼의 머리가 null 인 곳을 가리키고 있습니다 – Surz