cld ;we want scasb to auto-inc
mov di,0C000h ;begin search at $C000 (assumes ES = segment you want to search)
mov cx,1000h ;repeat until $CFFF
repne scasb ;begin the search
cld
mov di,0C000h
mov cx,1000h
repne scasb
jne notFound
;your code for what happens when you find it goes here
jmp done
notFound:
;your code for what happens when you don't find it goes here
done:
ret
1条答案
按热度按时间6uxekuva1#
你可以使用
REPNE SCASB
来搜索已知的值,我们假设该值当前在AL
中(如果不在,则先在mov
中搜索)。REPNE SCASB
(不相等时重复,扫描字符串字节)的工作方式如下:1.比较
AL
与byte ptr [es:di]
(di
指定的内存地址处的字节),并相应地设置标志。di
加1(如果方向标志清除,否则减1),cx
减1,不改变标志。1.如果为
AL = byte ptr [es:di]
或cx = 0
,则移至下一条指令。1.否则,后藤1。
此时,
di
将包含该字节的地址(如果找到的话)。然而,在这种情况下,您仍然需要一个条件分支,用于所需字节位于最后一个可能位置的极端情况。仅查看di
不会告诉您这一点。编辑:根据the hardware specifications.,将
ds:si
的错误用法更改为es:di