⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cwd-ovl.asm

📁 开放源码的编译器open watcom 1.6.0版的源代码
💻 ASM
📖 第 1 页 / 共 5 页
字号:
	;display the address.
	;
	mov	eax,esi
	sub	eax,_DB_Base
	mov	ecx,8
	test	SystemFlags,1
	jz	@@Use32_1
	mov	ecx,4
@@Use32_1:	call	Bin2Hex
	mov	b[edi],' '
	inc	edi
	mov	b[edi],0
	popm	ecx,ebp
@@1:	pushm	esi,ecx
	;
	;Display a word.
	;
	mov	ebx,-1
	mov	ax,0fffch
	int	31h
	jc	@@BadAddr
	push	es
	mov	es,RealSegment
	mov	bl,es:[esi]
	pop	es
@@BadAddr:	mov	eax,ebx
	mov	cl,2
	call	Bin2Hex
	mov	b[edi],' '
	inc	edi
	mov	b[edi],0
	popm	esi,ecx
	add	esi,1
	loop	@@1
	push	esi
	mov	b[edi],0
	mov	bp,_DB_Handle
	mov	cl,0
	mov	ch,_DB_YPos
	call	LocateWindow
	mov	ebx,offset ABuffer
	call	PrintWindow
	pop	esi
	popm	ecx,ebp
	inc	_DB_YPos
	dec	ebp
	jnz	@@0
	ret
DisplayBytes	endp

;==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==
;
;Display window full of data.
;
;On Entry:-
;
;ESI	- Watch entry.
;BP	- Destination window.
;EAX	- Base linear address.
;EBX	- Source linear address.
;
DisplayText	proc	near
	mov	_DT_Base,eax
	mov	ax,WatchFlags[esi]
	push	esi
	mov	_DT_Flags,ax
	mov	_DT_Handle,bp
	call	PointWindow		;need dimensions.
	mov	ebp,8+1
	test	SystemFlags,1
	jz	@@Use32_0
	mov	ebp,4+1
	;
@@Use32_0:	mov	edx,1
	test	_DT_Flags,2
	jnz	@@Use32_2
	add	edx,ebp
@@Use32_2:	;
	movzx	eax,WindowWidth2[esi]
	cmp	eax,edx
	jnc	@@ok
	mov	eax,edx
@@ok:	sub	edx,1
	sub	eax,edx
	xor	edx,edx
	mov	ecx,1
	div	ecx
	mov	ecx,eax
	movzx	ebp,WindowDepth2[esi]
	;
	mov	_DT_YPos,0
	pop	esi
	mov	WatchWidth[esi],eax
	mov	esi,ebx		;source address.
@@0:	pushm	ecx,ebp
	mov	edi,offset ABuffer
	test	_DT_Flags,2
	jnz	@@1
	pushm	ecx,ebp
	;
	;display the address.
	;
	mov	eax,esi
	sub	eax,_DT_Base
	mov	ecx,8
	test	SystemFlags,1
	jz	@@Use32_1
	mov	ecx,4
@@Use32_1:	call	Bin2Hex
	mov	b[edi],' '
	inc	edi
	mov	b[edi],0
	popm	ecx,ebp
@@1:	pushm	esi,ecx
	;
	;Display a byte.
	;
	mov	ebx,-1
	mov	ax,0fffch
	int	31h
	jc	@@BadAddr
	push	es
	mov	es,RealSegment
	mov	bl,es:[esi]
	pop	es
@@BadAddr:	mov	eax,ebx
	or	al,al
	jnz	@@ok9
	mov	al,'.'
@@ok9:	mov	b[edi],al
	inc	edi
	mov	b[edi],0
	popm	esi,ecx
	add	esi,1
	loop	@@1
	push	esi
	mov	b[edi],0
	mov	bp,_DT_Handle
	mov	cl,0
	mov	ch,_DT_YPos
	call	LocateWindow
	call	PointWindow
	mov	ax,WindowFlags[esi]
	pushm	eax,esi
	and	ax,65535-WindowTabs
	or	ax,WindowRaw
	call	ExtraWindow
	mov	ebx,offset ABuffer
	call	PrintWindow
	popm	eax,esi
	mov	WindowFlags[esi],ax
	pop	esi
	popm	ecx,ebp
	inc	_DT_YPos
	dec	ebp
	jnz	@@0
	ret
DisplayText	endp

;==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==
;
;Display window full of data.
;
;On Entry:-
;
;BP	- Destination window.
;EAX	- Base linear address.
;EBX	- Source linear address.
;
DisplayMixed	proc	near
	mov	_DM_Base,eax
	mov	ax,WatchFlags[esi]
	push	esi
	mov	_DM_Flags,ax
	mov	_DM_Handle,bp
	call	PointWindow		;need dimensions.
	mov	ebp,8+1	;+1+4
	test	SystemFlags,1
	jz	@@Use32_0
	mov	ebp,4+1	;+1+4
	;
@@Use32_0:	mov	edx,4
	test	_DM_Flags,2
	jnz	@@Use32_2
	add	edx,ebp
@@Use32_2:	;
	movzx	eax,WindowWidth2[esi]
	cmp	eax,edx
	jnc	@@ok
	mov	eax,edx
@@ok:	sub	edx,4
	sub	eax,edx
	shr	eax,2
	mov	ecx,eax
	push	eax
	add	al,al
	add	al,cl
	add	al,dl
	mov	_DM_APos,al
	pop	eax
	movzx	ebp,WindowDepth2[esi]
	;
	mov	_DM_YPos,0
	pop	esi
	mov	WatchWidth[esi],eax
	mov	esi,ebx		;source address.
@@0:	pushm	ecx,ebp
	mov	edi,offset ABuffer
	mov	ebx,offset BBuffer
	test	_DM_Flags,2
	jnz	@@1
	pushm	ecx,ebp
	;
	;display the address.
	;
	mov	eax,esi
	sub	eax,_DM_Base
	mov	ecx,8
	test	SystemFlags,1
	jz	@@Use32_1
	mov	ecx,4
@@Use32_1:	call	Bin2Hex
	mov	b[edi],' '
	inc	edi
	mov	b[edi],0
	popm	ecx,ebp
@@1:	pushm	esi,ecx
	;
	;Display a byte.
	;
	push	ebx
	mov	ebx,-1
	mov	ax,0fffch
	int	31h
	jc	@@BadAddr
	push	es
	mov	es,RealSegment
	mov	bl,es:[esi]
	pop	es
@@BadAddr:	mov	eax,ebx
	pop	ebx
	push	eax
	mov	cl,2
	call	Bin2Hex
	mov	b[edi],' '
	inc	edi
	mov	b[edi],0
	pop	eax
	or	al,al
	jnz	@@notz
	mov	al,'.'
@@notz:	mov	b[ebx],al
	inc	ebx
	mov	b[ebx],0
	popm	esi,ecx
	inc	esi
	loop	@@1
	push	esi
	mov	b[edi],0
	mov	bp,_DM_Handle
	mov	cl,0
	mov	ch,_DM_YPos
	call	LocateWindow
	mov	ebx,offset ABuffer
	call	PrintWindow
	mov	cl,_DM_APos
	mov	ch,_DM_YPos
	call	LocateWindow
	call	PointWindow
	mov	ax,WindowFlags[esi]
	pushm	eax,esi
	and	ax,65535-WindowTabs
	or	ax,WindowRaw
	call	ExtraWindow
	mov	ebx,offset BBuffer
	call	PrintWindow
	popm	eax,esi
	mov	WindowFlags[esi],ax
	pop	esi
	popm	ecx,ebp
	inc	_DM_YPos
	dec	ebp
	jnz	@@0
	ret
DisplayMixed	endp

;==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==
DisasListVars	proc	near
	call	ListVars
	jc	@@None
	mov	DisplayEIP,edx
	mov	DisplayCS,cx
	mov	SourceForceCheck,1
	mov	bp,DisasHandle
	call	UpdateWindow
@@None:	ret
DisasListVars	endp

;==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==
DataListVars	proc	near
	mov	_DLV_Handle,bp
	call	ListVars
	jc	@@None
	pushm	ecx,edx
	mov	bp,_DLV_Handle
	call	FindDataWatch
	popm	ecx,edx
	mov	WatchOffset[esi],edx
	mov	WatchOff[esi],Watch_Abs
	mov	WatchSelNum[esi],cx
	mov	WatchSeg[esi],Watch_Abs
	mov	WatchMoved[esi],0
	call	WatchCursorOFF
	call	TitleWatch
	mov	bp,_DLV_Handle
	call	UpdateWindow
@@None:	ret
DataListVars	endp

;==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==
RegsListVars	proc	near
	call	ListVars
	jc	@@None
	movzx	esi,RegsYPos
	mov	esi,d[DebugDis2RegList+esi*4]
	mov	[esi],edx
	cmp	RegsYPos,8
	jnz	@@Show
	mov	DebugCS,cx
	mov	DisplayCS,cx
	mov	DisplayEIP,edx
	call	DisasFull
@@Show:	call	RegisterDisplay	;Display current register values.
@@None:	ret
RegsListVars	endp

;==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==
;
;On Exit:-
;
;CX:EDX	- Symbol value.
;
ListVars	proc	near
	mov	_LV_Handle,0
	;
	mov	edi,SymbolList
	cmp	d[edi],-1
	jnz	@@GotSomeSyms
	mov	ebx,offset ErrorM5
	call	WindowPopup
	jmp	@@ExitNone
@@GotSomeSyms:	;
	mov	eax,offset HelpText0
	call	SetNewHelp
	;
	mov	edi,SymbolList
	xor	eax,eax		;reset longest so far.
	xor	ebx,ebx
@@gl0:	cmp	d[edi],-1
	jz	@@gl2
	movzx	ecx,SymbolTLen[edi]
	cmp	ecx,eax
	jc	@@gl1
	mov	eax,ecx
@@gl1:	inc	ebx
	add	edi,SymbolNext[edi]
	jmp	@@gl0
@@gl2:	cmp	ebx,15
	jc	@@gl3
	mov	bx,15
@@gl3:	mov	_LV_Depth,bx
	mov	_LV_Longest,al
	or	al,al
	jz	@@None
	add	_LV_Longest,2
	add	_LV_Longest,(4+1+8+1)+(1+1)
	cmp	_LV_Longest,74
	jc	@@lok
	mov	_LV_Longest,74
@@lok:	;
	mov	cl,b[VideoColumns]
	shr	cl,1
	mov	al,_LV_Longest
	add	al,3
	shr	al,1
	sub	cl,al
	mov	bl,b[VideoRows]
	shr	bl,1
	mov	al,b[_LV_Depth]
	add	al,3
	shr	al,1
	sub	bl,al
	mov	ch,_LV_Longest
	add	ch,3
	mov	bh,b[_LV_Depth]
	add	bh,3
	mov	ax,WindowClear+WindowBox+WindowStatic+WindowShad
	mov	dl,1fh
	mov	dh,7fh
	mov	esi,0
	mov	ebp,esi
	call	OpenWindow		;open main display window.
	mov	_LV_Handle,bp
	;
	mov	edi,offset _LV_SearchBuff+2
	mov	ecx,128-2
	xor	al,al
	rep	stosb
	mov	bp,_LV_Handle
	mov	ebx,offset _LV_SearchBuff
	mov	ax,WindowJCent+WindowBox
	call	BottomWindow
	mov	_LV_SearchPos,0
	;
	mov	edi,SymbolList
	mov	_LV_ListStart,edi
	mov	_LV_BarLast,-1
	mov	_LV_BarPos,0
	;
@@PrintList:	call	@@Off
	;
	mov	cx,0
	mov	ebx,15
	push	ds
	pop	es
	mov	edi,_LV_ListStart
@@pl0:	cmp	d[edi],-1
	jz	@@pl9
	pushm	ebx,ecx,edi
	call	@@printit
	popm	ebx,ecx,edi
	inc	ch
	add	edi,SymbolNext[edi]
	dec	ebx
	jnz	@@pl0
@@pl9:	;
	call	@@On
	;
@@WaitKey:	mov	ah,0
	int	16h
	;
	cmp	ah,1
	jz	@@ExitNone
	cmp	al,13
	jz	@@ExitYes
	;
	cmp	al,8
	jz	@@Delete
	;
	cmp	ah,80
	jz	@@Down
	cmp	ah,81
	jz	@@PDown
	cmp	ah,72
	jz	@@up
	cmp	ah,73
	jz	@@Pup
	;

COMMENT !
	cmp	al,"?"
	jz	@@Find
	cmp	al,'_'
	jz	@@Find
	cmp	al,'@'
	jz	@@Find
	cmp	al,'0'
END COMMENT !
	cmp	al,'!'

	jc	@@WaitKey
;	cmp	al,'9'+1
	cmp	al,'A'
	jc	@@Find
	call	UpperChar
	cmp	al,'A'
	jc	@@WaitKey
;	cmp	al,'Z'+1
	cmp	al,128
	jc	@@Find
	jmp	@@waitkey
	;
@@Delete:	cmp	_LV_SearchPos,0
	jz	@@WaitKey
	dec	_LV_SearchPos
	movzx	esi,_LV_SearchPos
	add	esi,offset _LV_SearchBuff+2
	mov	b[esi],0
	cmp	_LV_SearchPos,0
	jnz	@@Find2
	mov	bp,_LV_Handle
	call	BoxWindow
	call	ShowWinBottom
	jmp	@@WaitKey
	;
@@Find:	movzx	esi,_LV_SearchPos
	add	esi,offset _LV_SearchBuff+2
	call	UpperChar
	mov	b[esi],al
	inc	_LV_SearchPos
	;
@@Find2:	mov	ebx,_LV_ListStart
	mov	_LV_StartPos,ebx
	mov	edi,SymbolList
	mov	dx,0
@@f0:	mov	esi,offset _LV_SearchBuff+2
	cmp	d[edi],-1
	jz	@@f8
	push	edi
	movzx	ecx,SymbolTLen[edi]
	add	edi,SymbolText
@@f6:	mov	al,[edi]
	call	UpperChar
	cmp	al,[esi]
	jz	@@f1
@@f7:	pop	edi
	add	edi,SymbolNext[edi]
	jmp	@@f0
@@f1:	inc	esi
	inc	edi
	cmp	b[esi],0
	jz	@@f5
	loop	@@f6
	jmp	@@f7
	;
@@f8:	dec	_LV_SearchPos
	movzx	esi,_LV_SearchPos
	add	esi,offset _LV_SearchBuff+2
	mov	b[esi],0
	jmp	@@waitkey
	;
@@f5:	pushad
	mov	bp,_LV_Handle
	call	BoxWindow
	call	ShowWinBottom
	popad
	;
	pop	edi
	mov	esi,edi
@@f10:	movzx	ecx,_LV_Depth
@@f2:	cmp	d[edi],-1
	jz	@@f3
	add	edi,SymbolNext[edi]
	loop	@@f2
	mov	_LV_ListStart,esi
	push	dx
	call	@@Off
	pop	dx
	mov	_LV_BarPos,dx
	mov	eax,_LV_StartPos
	cmp	eax,_LV_ListStart
	jz	@@pl9
	mov	bp,_LV_Handle
	call	ClearWindow
	jmp	@@PrintList
@@f3:	mov	ebx,esi
	mov	edi,SymbolList
	cmp	edi,ebx
	jz	@@waitkey
@@f4:	mov	esi,edi
	add	edi,SymbolNext[edi]
	cmp	edi,ebx
	jnz	@@f4
	inc	dx
	mov	edi,esi
	jmp	@@f10
	;
@@Pup:	mov	edi,SymbolList
	cmp	edi,_LV_ListStart
	jz	@@waitkey
	movzx	ecx,_LV_Depth
@@psu1:	cmp	edi,_LV_ListStart
	jz	@@psu2
@@psu0:	mov	esi,edi
	add	edi,SymbolNext[edi]
	cmp	edi,_LV_ListStart
	jnz	@@psu0
	mov	_LV_ListStart,esi
	mov	edi,SymbolList
	loop	@@psu1
@@psu2:	call	@@off
	mov	bp,_LV_Handle
	call	ClearWindow
	jmp	@@PrintList
	;
@@Up:	cmp	_LV_BarPos,0
	jz	@@SUp
	call	@@Off
	dec	_LV_BarPos
	jmp	@@pl9
@@SUp:	mov	edi,SymbolList
	cmp	edi,_LV_ListStart
	jz	@@waitkey
@@su0:	mov	esi,edi
	add	edi,SymbolNext[edi]
	cmp	edi,_LV_ListStart
	jnz	@@su0
	mov	_LV_ListStart,esi
	call	@@Off
	mov	bp,_LV_Handle
	call	ScrollWindowD	;scroll the window.
	mov	cx,_LV_BarPos
	call	@@PrintEntry
	call	@@On
	jmp	@@waitkey
	;
@@PDown:	movzx	ecx,_LV_Depth
@@psd3:	mov	edx,ecx
	mov	edi,_LV_ListStart	;current position start.
@@psd0:	cmp	d[edi],-1
	jz	@@waitkey
	add	edi,SymbolNext[edi]
	loop	@@psd0		;move to bottom of current display.
	cmp	d[edi],-1		;end of the list?
	jz	@@waitkey
	;
	mov	esi,edi
	movzx	ecx,_LV_Depth	;now check what new position would be like.
@@psd1:	cmp	d[edi],-1
	jz	@@psd2
	add	edi,SymbolNext[edi]
	loop	@@psd1		;move to bottom of current display.
	mov	_LV_ListStart,esi
	call	@@off
	mov	bp,_LV_Handle
	call	ClearWindow
	jmp	@@PrintList
	;
@@psd2:	mov	ecx,edx
	dec	ecx
	jmp	@@psd3
	;
@@Down:	mov	ax,_LV_BarPos
	inc	ax
	cmp	ax,_LV_Depth
	jnc	@@SDown
	call	@@off
	inc	_LV_BarPos
	jmp	@@pl9
@@SDown:	mov	edi,_LV_ListStart
	add	edi,SymbolNext[edi]
	mov	esi,edi
	movzx	ecx,_LV_Depth
@@sd0:	cmp	d[edi],-1
	jz	@@waitkey
	add	edi,SymbolNext[edi]
	loop	@@sd0
	mov	_LV_ListStart,esi
	call	@@Off
	mov	bp,_LV_Handle
	call	ScrollWindowU	;scroll the window.
	mov	cx,_LV_BarPos
	call	@@PrintEntry
	call	@@On
	jmp	@@waitkey
	;
@@Off:	cmp	_LV_BarLast,-1
	jz	@@off1
	mov	bp,_LV_Handle
	call	PointWindow
	mov	ah,WindowAttrib[esi]
	mov	al,1
	mov	cx,_LV_BarLast
	mov	ch,cl
	call	BarWindow
	mov	_LV_BarLast,-1
@@off1:	ret
	;
@@On:	mov	bp,_LV_Handle
	call	PointWindow
	movzx	ecx,[esi].WindowDepth2
	mov	cx,_LV_BarPos
	mov	bp,_LV_Handle
	mov	_LV_BarLast,cx
	mov	ch,cl
	mov	ah,WindowAttrib[esi]
	rol	ah,4
	mov	ah,02fh
	mov	al,1
	cmp	VideoMono,0
	jz	@@pl2
	mov	ax,07001h
@@pl2:	call	BarWindow
	ret
	;
@@PrintEntry:	mov	edi,_LV_ListStart
	mov	ebx,ecx
	call	@@PointEntry
	jc	@@pre9
	mov	ch,bl
	mov	cl,0
	call	@@PrintIt
@@pre9:	ret
	;
@@PointEntry:	or	cx,cx
	jz	@@pe1
	cmp	d[edi],-1
	jz	@@pe9
	add	edi,SymbolNext[edi]
	dec	ecx
	jmp	@@PointEntry
@@pe1:	clc
	ret
@@pe9:	stc
	ret
	;
@@PrintIt:	push	edi
	mov	bp,_LV_Handle
	call	LocateWindow
	mov	edi,offset ABuffer
	movzx	ecx,_LV_Longest
	mov	al,' '
	rep	stosb
	xor	al,al
	stosb
	pop	edi
	push	edi
	mov	esi,offset ABuffer
	movzx	ecx,SymbolTLen[edi]
	xchg	esi,edi
	add	esi,SymbolText
	mov	al,' '
	stosb
	rep	movsb
	pop	edi
	;
	movzx	esi,_LV_Longest
	sub	esi,4+1+6+2+1
	add	esi,offset ABuffer
	mov	ax,SymbolSeg[edi]
	mov	ecx,4
	push	edi
	mov	edi,esi
	call	Bin2Hex
	mov	esi,edi
	pop	edi
	mov	b[esi],':'
	inc	esi
	push	edi
	mov	eax,SymbolDWord[edi]
	mov	ecx,8
	mov	edi,esi
	call	Bin2Hex
	xor	al,al
	stosb
	pop	edi
	;
	movzx	esi,_LV_L

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -