0

私は 16 ビットのリアル モード オペレーティング システムを作成しており、ユーザーが入力するコマンドを渡したいと考えています。入力はできますが、後で解析できるように結果の文字列を格納する方法がわかりません。各キャラクターをスタックに置き、使用したいときにポップしてリバースするよりも良い方法はありますか?

私のメインループ:

mainLoop:
    mov bx, s_PROMPT
    call printStr           ; print the 'MOOS> ' prompt

    inputLoop:
        call getKeyPress    ; wait for the user to press a key

        call printChar      ; print the pressed key so the user can
                            ; see what they've typed

        push bl???

        cmp bl, 0xD         ; 0xD = 13 = ASCII code for enter
        jne inputLoop       ; go to inputLoop if does not equal enter

    call newLine

    jmp mainLoop

ちなみにOSはMOOSという。

助けてくれる人に感謝します。

4

1 に答える 1

0

プッシュするたびに、スタックは次のようになります。

 00:  's'  - Assume that here starts your string by pusing each char
 01:  't'
 02:  'r'
 03:  'i'
 04:  'n'
 05:  'g'
 06:      - Here is your stackpointer after the string has been completed.

したがって、現在のスタックポインタをどこかに保存するだけです (ここでは 0 です)。文字をプッシュしている間に長さを数えるか、保存された値から現在のスタックを引いて長さを取得し、それをどこかにコピーします。文字列の編成方法によっては、0 バイトを追加するか、文字列と共に長さを格納する必要がある場合があります。もちろん、文字列をコピーせずに直接使用することもできます。

作業が完了したら、スタック ポインターを元の値にリセットするだけで0完了です。

于 2014-04-12T16:33:15.170 に答える