.data format db "%d", 0AH, 0 szText db "Reverse Engineering", 0 szText2 db "Reverse Engineering", 0 ;szText==szText2 szText3 db "Reverse Eng", 0 ;szText>szText3 szText4 db "Reverse Engj", 0 ;szText<szText4 szText5 db "Reverse Engh", 0 ;szText>szText5
.code
main PROC LEA ESI, szText LEA EDI, szText2 ;result=0 ;LEA EDI, szText3 ;result=1 ;LEA EDI, szText4 ;result=-1 ;LEA EDI, szText5 ;result=1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;strcmp逻辑 compare: ;比较过程 MOV AL,[ESI] ;取第一个字符串对应位置的字符,送入AL MOV AH,[EDI] ;取第二个字符串对应位置的字符,送入AH CMP AL,AH ;比较两个字符的大小 JL less ;第一个字符串小于第二个字符串,跳转 JG greater ;第一个字符串大于第二个字符串,跳转 CMP AL,0 ;字符串一对应位置字符等于字符串二对应位置字符,比较是否为终止符'\0' JE equal ;等于终止符则两字符串相等,跳转 ADD ESI,1 ;不等于终止符则继续比较,索引值+1 ADD EDI,1 ;同上 JMP compare ;那我再比较下一个位置的字符值 ;以下根据字符串比较规则对EAX(存放结果)的赋值 less: MOV EAX,-1 JMP print greater: MOV EAX,1 JMP print equal: MOV EAX,0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; print: INVOKE crt_printf, addr format, EAX
INVOKE crt_getchar INVOKE ExitProcess, 0 main ENDP
END main
编译、链接
将放入.asm的文件夹,放进masm32的目录下。
Strlen.asm
进入到指定路径->编译 ->链接
1 2 3 4
cd C:\masm32\strlen ml /c /coff strlen.asm link /subsystem:console strlen.obj strlen.exe
Strchr.asm
进入到指定路径->编译 ->链接
1 2 3 4
cd C:\masm32\strchr ml /c /coff strchr.asm link /subsystem:console strchr.obj strchr.exe
strcmp.asm
进入到指定路径->编译 ->链接
1 2 3 4
cd C:\masm32\strcmp ml /c /coff strcmp.asm link /subsystem:console strcmp.obj strcmp.exe
后记
编译汇编源程序
1
ml [/选项]汇编源文件列表[/link链接选项]
示例
1
ml /c /coff helloworld.asm
选项
说明
/c (常用)
仅进行编译,不自动链接
/coff (必用)
产生的obj文件格式为coff格式
/Cp (常用)
源代码区分大小写
/Fo filename
指定输出的obj文件名
/l pathname
指定include文件的路径
…
…
链接目标文件
1
link [选项][文件列表]
示例
1 2
link /subsystem:windows helloworld.obj (PE文件) link /subsystem:console helloworld.obj (控制台文件)