如何临时存储汇编中的行?

时间:2014-04-12 08:17:55

标签: assembly 16-bit real-mode

我正在制作一个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

感谢任何可以提供帮助的人。

1 个答案:

答案 0 :(得分: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即可完成。