我知道 8086 汇编和学习 MIPS 汇编。另外,我正在学习正则表达式,然后我想知道:
- 如何在它们上使用正则表达式?
这是一个从头开始组装的具有挑战性的问题。没有汇编语言会支持正则表达式作为一流的构造,因为抽象级别的差异太大,无法使其成为有用的包含。这意味着您需要自己构建它。
支持正则表达式本质上就像在程序中有一个编译器,它将表达式转换为一系列匹配的指令。您将必须构建所有组成部分:一个翻译引擎、一系列转换规则、一个 DFA 汇编器和一个匹配引擎。
也就是说,这不是不可能的!从小处着手,支持您想要支持的真实语言的微小子集,然后逐步向上。查看汇编语言编程的第 16 章,详细了解如何构建自己的正则表达式引擎。你需要很好地理解它们是如何工作的(本章将向你介绍)以及对汇编的深刻理解(参见前面的章节)。
试试这个: AsmRegEx - 正则表达式引擎
它是用 FASM 编写的。不幸的是,该项目似乎不会再有进展了……
汇编中不存在正则表达式,这似乎是一个有点奇怪的问题,因为正则表达式具有更高级别的语言性质,它在具体细节层面不存在......
编辑:内森,这里是您可能感兴趣的链接。向下滚动到页面底部;)
希望这会有所帮助,最好的问候,汤姆。
这里的文章集描述了如何从头开始构建一个非常简单但功能强大的正则表达式引擎。它使用 C++,但详细解释了理论,并且代码可以由经验丰富的程序员毫不费力地翻译成 ASM。
也就是说,我不认为这是一个特别有趣的练习,无论是学习 ASM 还是学习正则表达式。你只会被细节所困扰。
不确定您是否想知道如何在汇编程序中实现正则表达式引擎,或者只是如何在汇编语言中的空结尾字符串上轻松使用正则表达式。如果它是第一个,你已经得到了一些指示。如果是后者,则取决于您的平台,但最简单的方法是从您的程序集中调用 C 编码的库。Unix 变体已经在 libc 中提供了 POSIX 正则表达式,您可以从程序集中调用它们,只需遵循适当的调用约定。
从非常简单的正则表达式开始。例如,识别字母字符和数字字符的序列并从那里开始。您需要仔细考虑您的代码将如何交付结果。
首先创建一个 C 的正则表达式解析器可能是个好主意,因为这个论坛中的更多人将能够为您提供帮助。一旦你让它工作,就可以将它翻译成汇编代码。同样,这里有更多的人熟悉 8086 汇编语言编程而不是 MIPS,因此即使 CPU 架构不是很好,使用 8086 可能也是一个好主意。