在Assembly中检查String的第二个char

时间:2011-12-09 15:42:08

标签: assembly x86 intel masm

我正在使用MASM。

我想检查程序集中字符串的第二个(和第三个)字符。

我试过了:

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

这不起作用。有什么建议吗?

2 个答案:

答案 0 :(得分: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,'?'

答案 1 :(得分:1)

为什么不需要的电影?你可以这样做:

;szSomeString    BYTE    "?!@ABC", 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