我是汇编语言的新手,我想知道下面代码的作用:
Address Hex dump Command
01356A60 /$ 53 PUSH EBX
01356A61 |. 8BD9 MOV EBX,ECX
01356A63 |. 8B43 04 MOV EAX,DWORD PTR DS:[EBX+4]
01356A66 |. 56 PUSH ESI
01356A67 |. 8B70 10 MOV ESI,DWORD PTR DS:[EAX+10]
01356A6A |. 85F6 TEST ESI,ESI
01356A6C |.- 74 5B JZ SHORT 01356AC9
01356A6E |. 8BC6 MOV EAX,ESI
01356A70 |. 8D50 01 LEA EDX,[EAX+1]
01356A73 |> 8A08 /MOV CL,BYTE PTR DS:[EAX]
01356A75 |. 40 |INC EAX
01356A76 |. 84C9 |TEST CL,CL
01356A78 |.- 75 F9 \JNZ SHORT 01356A73
01356A7A |. 2BC2 SUB EAX,EDX
01356A7C |. 57 PUSH EDI
01356A7D |. 8BF8 MOV EDI,EAX
01356A7F |.- 74 47 JZ SHORT 01356AC8
我能理解的是运行这部分代码的是EAX
,例如“abcdefg”,EDX
有“bcdefg”(没有第一个字母的相同字符串) ,并且在循环期间,EAX
每次增加吃一个字母......但例如MOV CL,BYTE PTR DS:[EAX]
,它的目标是什么?那些像我这样的新手看不到的模式代码是什么?
提前致谢
答案 0 :(得分:2)
有一种模式,它被称为“汇编程序”。如果您需要就个人指示寻求帮助,那么您还没有准备好接受全部功能。
MOV CL,BYTE PTR DS:[EAX]“,它的目标是什么?
目标是将ds:[eax]
中存储的地址加载到8位寄存器cl
中。
通常,单个指令没有“目标”。较大的上下文表明循环是找到以零结尾的字符串的结尾。正如您所希望的那样,eax
中找到的字符串“end”将被edx
减去 - 字符串start - 然后减去指向字符串结尾的指针以字符串 length 开始结果。之后,该示例逐渐(可能)设置了一个进行进一步处理的例程。