2011-12-09 51 views
1

我正在使用MASM。检查组件中字符串的第二个字符

我想检查组件中字符串的第二个(和第三个)字符。

我尝试这样做:

; String is in DWORD operandA 
mov eax, OFFSET operandA+1 
cmp eax, '!' 
je Fact 

这是行不通的。有什么建议?

回答

2

你需要取消引用指针,以获得实际的字符:

mov eax, OFFSET operandA+1 
mov cl,byte ptr [eax] 
cmp cl,'!' 

mov eax, OFFSET operandA 
mov cl,byte ptr [eax + 1] 
cmp cl,'!' 

这样可以保留EAX,所以你可以用比较的第二个字符:

inc eax 
mov cl,byte ptr [eax] 
cmp cl,'?' 

mov cl,byte ptr [eax + 2] 
cmp cl,'?' 
+0

除非我记错了你的第一个和第二个例子是不等价的?将eax设置为操作数A + 1将从错误的地址读取指针值。 –

+1

@VilleKrumlinde:只要'operandA'元素的大小为1字节,他们就会读取相同的地址 – Necrolis

1

为什么不需要movs?你可以这样做:

;szSomeString BYTE "[email protected]", 0 
    mov  eax, offset szSomeString 
    xor  ebx, ebx 
    inc  ebx 
    cmp  byte ptr [eax + 1 * ebx], "!" 
    je  Yes 
    jmp  @F 

    ; Second char no match 
Yes: 
    ; Second char match 

mov  eax, offset szSomeString 
    inc  eax 
    cmp  byte ptr [eax], "!" 
    je  Yes 
    jmp  @F 
+0

那么,你甚至可以执行'mov eax,offset szSomeString' +'cmp byte ptr [eax + 1],“ !“或'cmp byte ptr [szSomeString + 1],”!“' –

相关问题