我正在使用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