汇编程序从内存中读取一个字节字符

时间:2015-11-17 05:30:45

标签: assembly x86

你可以帮我解决这个问题吗? 编写一个名为hw5.asm的汇编语言程序,它从内存中读取一个字节字符。它读取内存中的一串字符,并计算给定字符的出现次数,直到出现(2AH)。计数应该返回到内存中。字母DB'a'string1 DB“一块耐寒的苹果远离树上的土地”数DB?程序执行后,count等于6。

1 个答案:

答案 0 :(得分:2)

你需要一个带有常规cmp指令的循环,因为repne cmpsb不太适合这个任务。您不能轻易使用cmpsb,因为您不知道提前的长度。您必须检查给定的字节,以及0x2A(奇怪的终结符选择,BTW。通常使用零字节来终止字符串,而不是*)。您的示例字符串不包含*,因此看起来您将获得缓冲区溢出。

你可能根本不打扰字符串指令,因为lodsb runs slow,所以除非代码大小很重要,否则它不是循环字符串的好选择。

您可以使用无分支cmp / sete / add进行计数,以便为运行总计添加零或一,具体取决于当前字节是否等于您的参考字节。对于像这样的不可预测的事情来说,这可能是一个不错的选择,即使它创建了一个循环传递的依赖链。

请参阅代码wiki上的其他链接,了解很多好东西。

如果您在流程的某些特定部分遇到问题,则应该提出更具体的问题。我故意没有把这个答案简单化,因为它与编写好的汇编代码有关,而且你没有提出足够具体的问题来缩小主题范围。

我也低估了你的问题并投票结束为“过于宽泛”,因为它是。这个答案只是表面上的划痕。