2014-03-12 219 views
1

我正在重做,但我這次關閉。使用6502芯片。裝配打印緩衝區

我在寫一個程序集的打印緩衝區。

我遇到的一個問題是檢查字符串是否爲空。

這裏是我到目前爲止的代碼:(人類可讀)

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

可能只是做了一個明確的測試零一:

[START]: $0500 

    LDY #$00 
    LDX buffer 

    BEQ ENDOFLOOP 

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

    BNE LOOP 

ENDOFLOOP: 
    BRK 

LDX設置零標誌,所以沒有必要在測試前做任何事情來X

+0

謝謝你試試這個!所以SUPER SUPER(確切的說是2天)組裝的新手問題......但我對BEQ的語法感到困惑。 – Surz

+0

在彙編程序中,是否放置了BEQ ENDOFLOOP(我對什麼是內存地址感到困惑......是否只計算我將輸入多少行並放入內存地址? – Surz

+0

如果您在編寫實際的機器代碼,跳轉會從計算機所在的位置開始計算字節數,當它決定它應該到達何處時,您不必擔心彙編程序的問題 - 確切的語法會有所不同,但通常像'LOOP:'會由彙編器作爲標籤,'BNE LOOP'將意味着'BNE'指向該標籤所在的位置;彙編器將計算正確的字節數並填寫。 – Tommy

0

我只是移動比較正面...

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

我的6502是真的生疏,但你的想法。

+0

雖然空字符串的情況呢? – Surz

+0

你如何定義一個空字符串?您是指緩衝區的頭部爲空,還是緩衝區地址爲$ 0000? – Joe

+0

我正在使用字符串的PASCAL定義。我指的是緩衝區的頭部爲空 – Surz