我如何实现这样的目标:
abc db "abc",0
def db "def",0
textnotequal db "strings are not equal",0
textequal db "strings are equal",0
.if abc != def
invoke MessageBox, NULL, addr textnotequal, addr textnotequal, MB_OK
.elseif abc == def
invoke MessageBox, NULL, addr textequal, addr textequal, MB_OK
.endif
我需要移动abc&先解决问题还是通常不可能?
答案 0 :(得分:0)
您可以在汇编中编写cmpstr函数的版本。例如:
abc db "abc",0
def db "def",0
...
mov ecx,3 #the length of the abc and def strings
cld #set the direction flag so that EDI and ESI will increase using repe
mov esi, offset [abc] #moves address of abc string into esi
mov edi, offset [def] #exact syntax may differ depending on assembler you use
#I am not exactly sure what MASM accepts but certainly something similar to this
repe cmpsb #repeat compare [esi] with [edi] until ecx!=0 and current chars in strings match
#edi and esi increase for each repetition, so pointing to the next char
cmp ecx,0 #test if the above command passed until the end of strings
je strings_are_equal #if yes then strings are equal
# here print the message that strings are not equal (i.e. invoke MessageBox)
jmp end
strings_not_equal:
# here print the message that strings are equal (i.e. invoke MessageBox)
end: