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

顺便说一下,操作系统被称为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 回答