首页 > 解决方案 > 组装中的堆栈以及如何有效地使用它们

问题描述

我有这个消息:

msg: .ascii "March was an awkward month"

我需要在每个blank space. 例如,最终结果应该是:

month awkward an was March

我正在使用虚拟机(Oracle VM VirtualBox),我需要使用堆栈来完成这项工作。我几乎到处寻找信息,包括教授给我的幻灯片。但我仍然无法弄清楚它们是如何工作的,或者如何适用于这种情况。非常感谢一些帮助。

标签: assemblyx86stackcallstack

解决方案


有“堆栈”(通用数据结构,FILO 缓冲区),而对于汇编语言,有“堆栈”(用于跟踪调用和返回的堆栈,通常在 CPU 的帮助下以 PUSH/POP 指令的形式和特殊的“堆栈指针”寄存器)。

您可以单独使用“堆栈”来解决此问题。具体来说; 您将有一个递归函数搜索下一个单词的开头,然后(如果找到下一个单词)使用指向字符串其余部分的指针(从下一个单词开始)调用自身,然后单独打印第一个单词.

我需要使用堆栈

这是您的教授/讲师使用的措辞吗?如果他们说“堆栈”(复数,意思是不止一个堆栈),那就没有意义了。如果他们说“您需要使用堆栈”,请参阅我上面的评论。

如果他们说“您需要实现自己的堆栈数据结构并使用它”,那么它就会变得相似,但是用循环和显式推送/弹出替换递归。具体来说; “而未到达字符串结尾{查找下一个单词的开头;推送第一个单词的开头和长度};” 然后“当堆栈不为空{弹出开始和单词长度;打印单词;}”)。


推荐阅读