Spo 600週4ストリングとチャー反射

2582 ワード

こんにちは皆さん、Spo 600(ソフトウェア可搬性と最適化)反射と余分の探査ブログの第4週に戻ってください!このブログでは、私はいくつかの考えを共有し、文字については、文字列、アセンブリ言語の文字列を掘るつもりです.

登場人物
まず第一に、例を見ましょう!
define      SCREEN    $F000         ;Set the Screen
        LDY #$00            

DRAW_1_CHAR:    LDA STRING, Y           ;Load the String starts from y = 0
        BEQ DONE            ;If the character equal to zero, then jump to done  
        STA SCREEN, Y           ;Load character onto the screen     
        INY             ;Increase Y to read next char
        BNE DRAW_1_CHAR         ;If the STRING is not over, go back to the start
DONE:       BRK 

STRING:
dcb "H", "e", "l", "l", "o", $0D        ;The string to print
この小さなプログラムでは、以下の文字列から各文字を読み、画面に印刷します.
まず、スタート地点を$ f 000に設定する必要があります.
define      SCREEN    $F000     
次に、次のループに対してレジスタを0に設定します.
このループでは、文字列から文字を読み込み、スクリーンメモリに保存します.その後、y値を増やし、ループを実行して文字列の次の文字にアクセスします.文字列が空の場合、ループから飛び出します.
最後に結果は以下の通りです:

さて、もう一つのことを手に入れましょう.
define      SCINIT      $ff81 ; initialize/clear screen
define      CHRIN       $ffcf ; input character from keyboard
define      CHROUT      $ffd2 ; output character to screen
define      SCREEN      $ffed ; get screen size
define      PLOT        $fff0 ; get/set cursor coordinates

        JSR SCINIT      ;Reset the screen
PRINT_STRING:   LDY #$00

DRAW_1_CHAR:    LDA STRING, Y
        BEQ DONE
        JSR CHROUT      ;Pass each of the characters to the character out routine
        INY         
        BNE DRAW_1_CHAR 
DONE:       JMP PRINT_STRING    

STRING:
dcb "H", "e", "l", "l", "o", $0D
dcb "W", "o", "r", "l", "d","!",13
dcb 13
この新しいプログラムでは、画面に文字列を印刷し続けるために新しいループprintstrap文字列を追加します.結果は以下の通りです.

マイリフレクション
今週は、文字列と文字が6502アセンブリ言語でどのように機能するかを学びました.文字セットは、文字セットの文字への数値参照でバイナリでエンコードされます.例えば、スペースを表現するために32を使用し、48は0を表します.6502アセンブリ言語では、アセンブラの文字列は上記の例のようにバイト列として格納され、プログラマは通常通りメモリを処理する必要があります.