答案 0 :(得分:2)
你需要一个带有常规cmp
指令的循环,因为repne cmpsb
不太适合这个任务。您不能轻易使用cmpsb
,因为您不知道提前的长度。您必须检查给定的字节,以及0x2A
(奇怪的终结符选择,BTW。通常使用零字节来终止字符串,而不是*
)。您的示例字符串不包含*
,因此看起来您将获得缓冲区溢出。
你可能根本不打扰字符串指令,因为lodsb
runs slow,所以除非代码大小很重要,否则它不是循环字符串的好选择。
您可以使用无分支cmp / sete / add
进行计数,以便为运行总计添加零或一,具体取决于当前字节是否等于您的参考字节。对于像这样的不可预测的事情来说,这可能是一个不错的选择,即使它创建了一个循环传递的依赖链。
如果您在流程的某些特定部分遇到问题,则应该提出更具体的问题。我故意没有把这个答案简单化,因为它与编写好的汇编代码有关,而且你没有提出足够具体的问题来缩小主题范围。
我也低估了你的问题并投票结束为“过于宽泛”,因为它是。这个答案只是表面上的划痕。