memcpyをMOVSBを使って作り直した。MOVSBは[DS:ESI]にあるバイトを[DS:EDI]にコピーする命令。DF(ディレクションフラグ)の状態に応じてESIとEDIをインクリメントか、デクリメントする。今回はCLD命令でDFをクリアして、インクリメントさせている。そしてMOVSBの前にREPを付けることでECX回だけ繰り返している。しかし、string.hに定義されている関数を全部アセンブラで書いていくのは大変だな。しかし、void*をchar*に変換できないのはなんでだろう?
memcpy: CLD MOV EDI, [ESP + 4] MOV ESI, [ESP + 8] MOV ECX, [ESP + 12] MOV EAX, EDI;memcpyの返り値 REP MOVSB RET