📄 search.asm
字号:
;
; GRDP
;
; Copyright(c) LADsoft
;
; David Lindauer, camille@bluegrass.net
;
;
; SEARCH.ASM
;
; Function: Search memory
;
;MASM MODE
.MODEL SMALL
.386
include eprints.inc
include einput.inc
include emtrap.inc
include eoptions.inc
PUBLIC search
EXTRN paddr:PROC
.data
PSParglen dw 0 ;#bytes in GRDBPSP:80h buffer
.CODE
search PROC
push es
mov [PSParglen],0
call WadeSpace
jz errx
call ReadAddress ; read address
jc errx
mov ecx,ebx
call defDS ; get DS
call WadeSpace
jz errx
push ecx
mov di,dx
push di
call ReadAddress ; read len
pop di
pop ecx
jc errx
or edx,edx
jnz hasseg2
mov dx,di ;default to first seg
hasseg2:
mov es,[psp]
push di
mov di,80h
grablp: ; read rest of params
call WadeSpace
jz grabdone
cmp al,"'"
jz readstring
cmp al,'"'
jnz readnum
readstring: ; read a quoted string
inc si
readstringlp:
lodsb
cmp al,13
jz grabdone
cmp al,'"'
jz grablp
cmp al,"'"
jz grablp
stosb
inc [PSParglen]
cmp [PSParglen],080h
jnc errx
jmp readstringlp
readnum: ; read an (8-bit) number
push di
push cx
call ReadNumber
pop cx
pop di
jc errx2
stosb
inc [PSParglen]
cmp [PSParglen],080h
jnc errx
jmp grablp
grabdone: ; all params got now
pop di
test [optdwordcommand],1 ; if not in flat real
jnz gp2
movzx ebx,bx ; make them 16-bit
movzx ecx,cx
gp2:
test [PSParglen],0ffh ; see if any search
jz errx
movzx edi,di
movzx eax,dx ; calculate length
shl eax,4
add ebx,eax
mov edx,edi
mov eax,edx
shl eax,4
add eax,ecx
sub ebx,eax ; ds:cx = start, ebx = len
push ebx
call CRLF
pop ebx
pop es
mov esi,ecx
noseg:
test [optdwordcommand],1 ; if not in flat real
jnz go1
cmp si,8000h ; adjust DS to keep search in bounds
jc go1
sub si,8000h
add dx,800h
go1:
; call ScanKey ; I put this in for debug, but,
; jnz nofill2 ; good for mistakes too...
push es
mov es,[psp]
movzx ecx,[PSParglen]
push ds
mov ds,dx
push esi
mov edi,80h
db 67h
repe cmpsb
pop esi
pop ds
pop es
jnz nomatch
push ebx
push dx
mov eax,esi
call paddr
pop dx
call crlf
pop ebx
nomatch:
inc esi
dec ebx
jne noseg
clc
ret
nofill:
pop es
nofill2:
clc
ret
errx2:
pop di
errx:
pop es
stc
ret
search endp
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -