Стеки в сборке и как их эффективно использовать - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть это сообщение:

msg: .ascii "March was an awkward month"

И мне нужно инвертировать каждое слово после каждого blank space. Например, конечный результат должен быть следующим:

month awkward an was March

Я использую виртуальную машину (Oracle VM VirtualBox), и мне нужно использовать стеки для этой работы. Я пытался найти информацию почти везде, включая слайды, которые мне дал мой профессор. Но я до сих пор не могу понять, как они работают или как подойти к этой ситуации. Был бы очень признателен за помощь.

1 Ответ

1 голос
/ 28 апреля 2020

Существуют «стеки» (общие структуры данных, буферы FILO), а для языка ассемблера есть «стек» (тот, который поддерживается для отслеживания вызовов и возвратов, часто с помощью ЦП в форме PUSH / POP инструкции и специальный регистр «указатель стека»).

Вы можете решить эту проблему, используя только «стек». В частности, у вас будет рекурсивная функция, которая ищет начало следующего слова, затем (если найдено следующее слово) вызывает себя с указателем на остаток строки (начиная со следующего слова), а затем печатает только первое слово .

Мне необходимо использовать стеки

Это формулировка, которую использовал ваш профессор / инструктор? Если они сказали «стеки» (множественное число, что означает более одного стека), то это не имеет смысла. Если они сказали «вам нужно использовать стек», то смотрите мои комментарии выше.

Если они сказали «вам необходимо реализовать собственную структуру данных стека и использовать ее», то она становится похожей, но замена рекурсии на циклы и явные нажатия / всплывающие окна. В частности, "пока конец строки не достигнут {найти начало следующего слова; pu sh начало и длина первого слова};" а затем "пока стек не пустой {всплывающее начало и длина слова; выведите слово;}").

...