crkme06
前→
前と比べて正解処理にたどり着くまでの道のりがけっこう長くなっている。
・正解文字列は10文字(004011FD . 83F8 0A CMP EAX,0A)
0040120C . 0FBF06 MOVSX EAX,WORD PTR DS:[ESI]
EAXにESIの先頭2文字(16バイト分)を格納する。ESIには入力データへのポインタが格納されているのでEAXには入力文字列の先頭2文字が格納される。
00401214 . 66:3D 454F CMP AX,4F45
このEAXの値は0x454F(= EO)でなければならない。
(EAXの値は0x4F45だけど、リトルエンディアンなので格納するときに順序が逆になる)
・3文字目以降が数字かを判定して、EDXに7文字目以降の数字の合計を格納。
その後EAXにEDXを転送してEDXを0にする。
0040124A . F7F1 DIV ECX
この命令、単にEAXをECXで除算するだけでなく、商をEAXに、余りをEDXに格納する。その後CMP EDX, 0 となってるのでEAXがちょうど10で割り切れるようにしなければならない。
EAXには8文字目~10文字目の数字の合計が格納されているのでこれらの和が10の倍数になればいいはず。
・最初がEO
・3~7文字目は数字
・8~10文字目は数字で合計が10の倍数
なら何でもいいみたい。