FASM: Compare Strings
by admin on Mar.18, 2011, under Programming
I’m currently working on a simple webserver (http-daemon) entirely coded in FASM. It’s currently based on the Windows API and handles GET-requests only. In order to be able to compare requests with known commands I had to write a simple procedure handling string comparisons.
I commented each step of the code, therefore it shouldn’t be that hard to understand it:
[fasm]; Compares two strings and sets eax -> 1 if they’re equal
;
; Usage:
; str_1 db ‘this is the first string’,0
; str_2 db ‘this is the second string’,0
;
; ccall CompareStrings, str1, str2
; cmp eax, 1 ; address of string1
proc CompareStrings, str1, str2
lea edi, [str2] ; edi -> address of string2
dec edi ; edi = edi – 1
.lab1: ; loop through all chars and compare each of them
inc edi ; ds:di –> next character in string2
lodsb ; al = next char from string1. loadsb increments si automatically
cmp [edi], al ; compare characters
jne .notfound ; jump out of the loop if they’re unequal
cmp al, 0 ; chars are equal, but make sure we compared the entire string
jne .lab1 ; if not, continue the loop
mov eax, 1 ; else: strings are equal -> eax = 1
ret ; return; result: strings are equal
.notfound: ; chars are not equal
mov eax, 0 ; unequal -> eax = 0
ret ; return; result: strings are not equal
endp[/fasm]
Comparing strings made easy.
July 26th, 2011 on 14:58
Junge str_1 und str_2 da gehoert der Unterstrich weg!
July 26th, 2011 on 14:59
\forall x in E: x>100
October 8th, 2015 on 17:46
Kind of big for FASM 🙂
Try this..
cld
mov ecx,0ah; length 10 bytes here
lea esi,[buf1]
lea edi,[buf2]
repe cmpsb
jne exit; strings are not the same