Assembly 汇编语言中的大于、小于或等于?

Assembly 汇编语言中的大于、小于或等于?,assembly,x86,Assembly,X86,我真的是汇编语言的初学者。我对语法知之甚少。我在网上学习,但我不能很好地理解它。我找到了一个要实验的示例问题,但我真的不知道如何去做 问题出在这里 给您两个字符串,我们称之为A和B。A最多5个字符,B最多255个字符。编写一个汇编语言程序,计算字符串B中字符串A的出现次数,将结果留给AL。因此,如果A是字符串“job”,B是字符串“job I got A job”,则程序应在AL中保留2 到目前为止,我只能打印和显示字符串。我如何解决涉及数学逻辑的问题 if AL > 7, display

我真的是汇编语言的初学者。我对语法知之甚少。我在网上学习,但我不能很好地理解它。我找到了一个要实验的示例问题,但我真的不知道如何去做

问题出在这里

给您两个字符串,我们称之为A和B。A最多5个字符,B最多255个字符。编写一个汇编语言程序,计算字符串B中字符串A的出现次数,将结果留给AL。因此,如果A是字符串“job”,B是字符串“job I got A job”,则程序应在AL中保留2

到目前为止,我只能打印和显示字符串。我如何解决涉及数学逻辑的问题

if AL > 7, display “Greater than Seven!”,
if AL < 7, display “Less than Seven!”,
if AL = 7, display “Equal to Seven!”.

一种有效的方法是使用

        repne   scasb
如果您找到了一个匹配项,那么您可以使用进行a和B中当前点的字符串比较

        repe    cmpsb
我假设您有一个指南,可以解释这些指令如何使用寄存器


有一种更快的方法可以搜索字符串中的单个字符,在循环中使用具有相同值的4(或8)个字节的寄存器,但是对于这个示例程序来说太复杂了。

听起来像是在汇编中编写字符串搜索程序。有很多方法可以做到这一点。建议从简单字符串搜索开始(假设x86/64),CMP(比较)指令将在标志寄存器中设置各种标志。然后可以使用条件指令,其行为取决于标志。明显(无效)的例子有条件跳转:jz(零跳转)、jnz(非零跳转)、ja(高于时跳转)、jb(低于时跳转)、jl(低于时跳转)、jg(高于时跳转)等。还有条件移动。JFYI,还有更有效的算法用于搜索文本中的子字符串,使用预先计算的表格将文本B提前到A的全长(每次比较)。但是预计算需要一些时间(对于最大255个字节的B来说可能不值得),而且此任务主要是内存I/O受限的,因此通过增加A的长度获得的性能增益可能不会太大(同样,对于A来说,5的限制可能低于阈值,在有意义的情况下,8字节矢量化的第一个字符检查可能会超过该阈值)。我看过上面的维基了,我说的是“博耶-摩尔”。
        repe    cmpsb