首页 > 解决方案 > 在 C++/程序集中计算字符频率(直方图)

问题描述

我是汇编语言的新手,可以使用一些帮助。我应该创建一个使用内联汇编(masm)和 c++ 的程序,该程序将一串文本(最多 127 个字符)输入到缓冲区中,然后计算文本中每个字符的实例数.

例如,如果你的字符串是“baby”

然后 b-2, a-1, y-1

在汇编中唯一需要做的是识别字符并计算有多少个字母/数字实例。然后将每个字符的实例放入另一个缓冲区。所有这些都将在一个名为 CountData() 的函数中完成。其他一切都可以在 c++ 中。

到目前为止,我有输入文本并将其存储在缓冲区中的函数,但我仍然需要编写一个函数 CountData(),它(在汇编中)读取整个字符串并识别每个字符,然后跟踪每个字符的数量有。但是我对如何用汇编语言访问字符串感到困惑。我可以使用 for 循环并在其中编写汇编代码吗?如果是这样,汇编代码是否可以访问函数的变量/数据?我尝试查找示例,但找不到任何相关的内容。不希望为我完成作业,只是想朝着正确的方向前进。在此先感谢您的帮助。

class BaseClass
{
private:
     const int characterNumber = 127;
     cont int asciiNumber = 59;
     char InputBuffer[characterNumber];
     char CountBuffer[asciiNumber];
public:

     InputData()
     {
          string sentence;
          cout << "Enter a sentence to have its characters counted: " << endl;
          cin.getline(InputBuffer, characterNumber);
     }

     CountData()
     {

     }


};

标签: assemblyvisual-c++x86histograminline-assembly

解决方案


我想这可能被认为是作弊,但就像 old_timer 在评论中所说的那样,用 c++ 编写它,然后指示编译器发出程序集。使用 msvc 时,开关是 /Fa,您可能希望包含 /Od 以禁用优化,这样它就不会那么神秘了。

一旦你看到编译器是如何做到的,你就会更好地了解如何去做。


推荐阅读