Проверьте второй символ строки в сборке - PullRequest
1 голос
/ 09 декабря 2011

Я использую MASM.

Я бы хотел проверить второй (и третий) символ строки в сборке.

Я пробовал это:

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

Это не работает. Любой совет?

Ответы [ 2 ]

2 голосов
/ 09 декабря 2011

вам нужно разыменовать указатель, чтобы получить реальный символ:

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 голос
/ 12 февраля 2012

Почему ненужные мовы? Вы могли бы сделать это:

;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
...