我正在使用MASM。檢查組件中字符串的第二個字符
我想檢查組件中字符串的第二個(和第三個)字符。
我嘗試這樣做:
; String is in DWORD operandA
mov eax, OFFSET operandA+1
cmp eax, '!'
je Fact
這是行不通的。有什麼建議?
我正在使用MASM。檢查組件中字符串的第二個字符
我想檢查組件中字符串的第二個(和第三個)字符。
我嘗試這樣做:
; String is in DWORD operandA
mov eax, OFFSET operandA+1
cmp eax, '!'
je Fact
這是行不通的。有什麼建議?
你需要取消引用指針,以獲得實際的字符:
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,'?'
爲什麼不需要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
那麼,你甚至可以執行'mov eax,offset szSomeString' +'cmp byte ptr [eax + 1],「 !「或'cmp byte ptr [szSomeString + 1],」!「' –
除非我記錯了你的第一個和第二個例子是不等價的?將eax設置爲操作數A + 1將從錯誤的地址讀取指針值。 –
@VilleKrumlinde:只要'operandA'元素的大小爲1字節,他們就會讀取相同的地址 – Necrolis