2011-12-09 80 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],」!「' –

相關問題