[英]String Search, x86 Assembly
我在组装课上遇到了某个作业问题。 我看过的书和教程并没有帮助我弄清楚,所以我想我会来这里的。 这是任务。
“编写一个内联汇编语言程序子例程,它在字符串中搜索一个字符并返回该字符在字符串中的第一次出现。
子例程必须调用 search 并且字符串在 ESI 寄存器中传递。 要搜索的字符应该放在 AL 寄存器中,字符串的长度在 ECX 寄存器中。
子程序应返回字符在 EBX 寄存器中的位置,其中第一个字符为 1,如果未找到,则返回 0。
例如,给定 mystring = 'EXCELLENTE' 中的 10 个字符的字符串,定位第一个 'X' 字符。
lea ESI,mystring mov al,'X' mov ecx,10 call search ------returns with EBX =2 lea ESI,mystring mov al,'Y' mov ecx,10 call search ------returns EBX = 0
该程序必须适用于任何大小的字符串或字符组合”
我对子程序的理解很好,最近学习了 repne scasb 函数。 我相信我可能不得不使用它,但我完全不确定。 另外为什么我的教授在他的例子中使用了 ESI 寄存器? 我认为一个是专门用于内存位置的。 这是我必须编写的第一个涉及字符串操作的代码,它刚刚飞过我的头。 任何和所有的帮助将不胜感激
这是我的 SEARCH 例程实现:
@Search:Push EDI ; Save EDI register
Mov EDI,ESI ; ScaS uses the EDI register
Mov EBX,ECX ; Save ECX register into output register
ClD ; Clear string direction flag
Cmp ECX,1 ; Prevent ECX=0 case
RepNE ScaSB ; Search AL for ECX Byte in [EDI]
CMovNE ECX,EBX ; If not found AL, set ECX to his old value
Sub EBX,ECX ; Process AL position; EBX=0 if AL not found
Pop EDI ; Restore EDI register
Ret ; Return from subroutine
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.