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

📄 sdisassm.inc

📁 开放源码的编译器open watcom 1.6.0版的源代码
💻 INC
📖 第 1 页 / 共 4 页
字号:
	call	put_prefix
	call	put_open
	cmp	_adrsiz,0
	jz	@@l1
	call	put_textax
	call	makehexax
	call	put_adrmemb
	jmp	put_close
@@l1:	call	put_texteax
	call	makehexeax
	call	put_adrmemb
	jmp	put_close
_type_ObAL:					; offs16/32 , AL
	call	put_tab
	call	put_prefix
	call	put_open
	cmp	_adrsiz,0
	jz	@@l1
	call	put_textax
	call	makehexax
	call	put_adrmemb
	jmp	@@l2
@@l1:	call	put_texteax
	call	makehexeax
	call	put_adrmemb
@@l2:	call	put_close
	call	put_comma
	mov	edx,offs _regtab8
	jmp	put_string

_type_eAXOv:
	call	put_tab
	cmp	_opsiz,0
	mov	edx,offs _regtab16
	jnz	@@l0
	mov	edx,offs _regtab32
@@l0:	call	put_string
	call	put_comma
	call	put_prefix
	call	put_open
	cmp	_adrsiz,0
	jz	@@l1
	call	put_textax
	call	makehexax
	call	put_close
	cmp	_opsiz,0
	jnz	put_adrmemw
	jmp	put_adrmemd
@@l1:	call	put_texteax
	call	makehexeax
	call	put_close
	cmp	_opsiz,0
	jnz	put_adrmemw
	jmp	put_adrmemd
_type_OveAX:
	call	put_tab
	call	put_prefix
	call	put_open
	cmp	_adrsiz,0
	jz	@@l1
	call	put_textax
	call	makehexax
	jmp	@@l2
@@l1:	call	put_texteax
	call	makehexeax
@@l2:	call	put_close
	call	put_comma
	cmp	_opsiz,0
	jz	@@l0
	call	put_adrmemw
	mov	edx,offs _regtab16
	jmp	put_string
@@l0:	call	put_adrmemd
	mov	edx,offs _regtab32
	jmp	put_string




;----------------------------------
_type_Eb:					; ex:INC bptr [addr]
	call	put_tab
	call	put_textal
	call	decode_mode
	mov	ebp,offs _regtab8
	mov	edx,offs _text_bptr
	cmp	ah,03h
	jz	@@l2
	call	put_string
@@l2:	call	decode_by_mod
	jmp	put_memb
_type_Ew:					; ex:NEG wptr [addr]
	call	put_tab
	call	put_textal
	call	decode_mode
	mov	ebp,offs _regtab16
	mov	edx,offs _text_wptr
	cmp	ah,03h
	jz	@@l2
	call	put_string
@@l2:	call	decode_by_mod
	jmp	put_memw
_type_Ev:					; push 0000h / push 12345678h
	call	put_tab
type_Ev:call	put_textal
	call	decode_mode
	cmp	_opsiz,0
	mov	ebp,offs _regtab16
	mov	edx,offs _text_wptr
	jnz	@@l1
	mov	ebp,offs _regtab32
	mov	edx,offs _text_dptr
@@l1:	cmp	ah,03h
	jz	@@l2
	call	put_string
@@l2:	call	decode_by_mod
	cmp	_opsiz,0
	jnz	put_memw
	jmp	put_memd
_type_Ib:
	call	put_tab				; INT 00h
type_Ib:call	put_textal
	call	makehexal
	jmp	put_charh
_type_Iw:
	call	put_tab				; RET 0000h
type_Iw:call	put_textax
	call	makehexax
	jmp	put_charh
_type_Iv:
	call	put_tab
type_Iv:cmp	_opsiz,0
	jz	@@l1
	call	put_textax
	call	makehexax
	jmp	put_charh
@@l1:	call	put_texteax
	call	makehexdword
	jmp	put_charh
_type_IwIb:
	call	put_tab
	call	put_textax
	call	makehexax
	call	put_charh
	call	put_comma
	call	put_textal
	call	makehexal
	jmp	put_charh




;----------------------------------
_type_EwRw:
	call	put_tab
	call	put_textal
	call	decode_mode
	mov	ebp,offs _regtab16
	call	decode_by_mod
	call	put_memw
	call	put_comma
	jmp	decode_by_reg



;----------------------------------
_type_GvEvIb:
	call	_type_GvEv
	call	put_comma
	jmp	type_Ib
_type_GvEvIv:
	call	_type_GvEv
	call	put_comma
	jmp	type_Iv
_type_EvGvIb:
	call	_type_EvGv
	call	put_comma
	jmp	type_Ib
_type_EvGvIv:
	call	_type_EvGv
	call	put_comma
	jmp	type_Iv
_type_EvGvCL:
	call	_type_EvGv
	call	put_comma
	mov	edx,offs _regtab8+4
	jmp	put_string
_type_GvMp:
	call	put_tab
	call	put_textal
	call	decode_mode
	cmp	_opsiz,0
	jz	@@l1

	mov	ebp,offs _regtab16
	call	decode_by_reg
	call	put_comma
	call	decode_by_mod
	jmp	put_memfw

@@l1:	mov	ebp,offs _regtab32
	call	decode_by_reg
	call	put_comma
	call	decode_by_mod
	jmp	put_memfd





;----------------------------------
_type_movIb:
	call	put_tab
	and	eax,07h
	lea	edx,_regtab8[eax*4]
	call	put_string
	call	put_comma
	call	put_textal
	call	makehexal
	jmp	put_charh
_type_movIv:
	call	put_tab
	and	eax,07h
	cmp	_opsiz,0
	jz	@@l1
	lea	edx,_regtab16[eax*4]
	call	put_string
	call	put_comma
	call	put_textax
	call	makehexax
	jmp	put_charh
@@l1:	lea	edx,_regtab32[eax*4]
	call	put_string
	call	put_comma
	call	put_texteax
	call	makehexdword
	jmp	put_charh
_type_eAXr:					; eAX,reg16/32
	call	put_tab
	and	eax,7
	cmp	_opsiz,0
	mov	ebx,offs _regtab16
	jnz	@@l1
	mov	ebx,offs _regtab32
@@l1:	lea	edx,[ebx+eax*4]
	call	put_string
	call	put_comma
	mov	edx,ebx
	jmp	put_string



;----------------------------------
_type_Jb:
	call	put_tab
	call	put_textal
	movsx	eax,al
	test	eax,eax
	jns	@@0
	neg	_jump_taken
@@0:	add	eax,esi
	cmp	_adrsiz,0
	jnz	makehexax
	jmp	makehexeax
_type_Jv:					; relative addr calculation
	call	put_tab
	cmp	_adrsiz,0
	jz	@@l1
	call	put_textax
	movsx	eax,ax
	test	eax,eax
	jns	@@0
	neg	_jump_taken
@@0:	add	eax,esi
	jmp	makehexax
@@l1:	call	put_texteax
	test	eax,eax
	jns	@@1
	neg	_jump_taken
@@1:	add	eax,esi
	jmp	makehexeax

_type_loopne:
	mov	eax,5			; check for JNZ
	call	check_jump
	jmp	_type_loop
_type_loope:
	mov	eax,4			; check for JZ
	call	check_jump
	jmp	_type_loop
_type_loop:
	cmp	_opsiz,0		; check for CX or ECX == 0
	jnz	@@1
	mov	eax,dptr _ecx
	jmp	@@2
@@1:	movzx	eax,wptr _ecx
@@2:	dec	eax
	setnz	al
	or	_jump_taken,al
	jmp	_type_Jb

_type_jumpJb:
	mov	_jump_taken,1
	jmp	_type_Jb
_type_jumpJv:
	mov	_jump_taken,1
	jmp	_type_Jv
_type_jumpAp:
	mov	_jump_taken,1
	jmp	_type_Ap
_type_jumpEv:
	mov	_jump_taken,1
	jmp	_type_Ev



;----------------------------------
_type_regv:
	call	put_tab
	and	eax,07h
	cmp	_opsiz,0
	lea	edx,_regtab16[eax*4]
	jnz	@@l1
	lea	edx,_regtab32[eax*4]
@@l1:	jmp	put_string
_type_setb:
	and	eax,0Fh
	lea	edx,_settab386[eax*8]
	call	put_string
	jmp	_type_Eb
_type_jumpb:
	and	eax,0Fh
	lea	edx,_jumptab86[eax*4]
	call	check_jump
	call	put_string
	jmp	_type_Jb
_type_jumpv:
	and	eax,0Fh
	lea	edx,_jumptab86[eax*4]
	call	check_jump
	call	put_string
	jmp	_type_Jv
_type_Ap:				; very far jump (imm.seg:imm.offset)
	call	put_tab
	cmp	_opsiz,0
	jz	@@l1
	call	put_texteax		; offset16
	mov	ebx,eax
	shr	eax,16
	call	makehexax
	call	put_colon
	mov	eax,ebx
	jmp	makehexax
@@l1:	call	put_texteax		; offset32
	xchg	eax,ebx
	call	put_textax
	call	makehexax
	call	put_colon
	xchg	eax,ebx
	jmp	makehexeax
_type_farjumpEv:
	mov	_jump_taken,1
_type_farEv:
	call	put_tab
	call	put_textal
	call	decode_mode
	cmp	_opsiz,0
	mov	ebp,offs _regtab16
	mov	edx,offs _text_far
	jnz	@@l1
	mov	ebp,offs _regtab32
	mov	edx,offs _text_far
@@l1:	cmp	ah,03h
	jz	@@l2
	call	put_string
@@l2:	call	decode_by_mod
	cmp	_opsiz,0
	jnz	put_memfw
	jmp	put_memfd
_type_pushIb:
	call	put_tab
	call	put_textal
	and	eax,00FFh
	cmp	_opsiz,0
	jz	@@l1
	call	makehexax
	jmp	put_charh
@@l1:	call	makehexeax
	jmp	put_charh
_type_pushs:					; segment register
	call	put_tab
	shr	al,3
	and	eax,07h
	lea	edx,_segtab86[eax*4]
	jmp	put_string
_type_pushd:					; pusha(d)/popa(d)
	cmp	_opsiz,0
	jnz	@@done
	mov	bptr [edi],'d'
	inc	edi
@@done:	ret
_type_es:
	mov	_prefix,0
	jmp	_type_seg
_type_cs:
	mov	_prefix,1
	jmp	_type_seg
_type_ss:
	mov	_prefix,2
	jmp	_type_seg
_type_ds:
	mov	_prefix,3
	jmp	_type_seg
_type_fs:
	mov	_prefix,4
	jmp	_type_seg
_type_gs:
	mov	_prefix,5
_type_seg:
	call	decode2
	mov	_prefix,3
	ret
_type_opsiz:
	xor	_opsiz,1
	call	decode2
	xor	_opsiz,1
	ret
_type_adrsiz:
	xor	_adrsiz,1
	call	decode2
	xor	_adrsiz,1
	ret
_type_rep:
	call	put_tab
	jmp	decode2
_type_cdq:
	cmp	_opsiz,0
	jz	@@l1
	cmp	al,98h
	mov	edx,offs _text_cbw
	jz	@@done
	cmp	al,99h
	mov	edx,offs _text_cwd
	jz	@@done
	mov	edx,offs _text_none
	jmp	@@done
@@l1:	cmp	al,98h
	mov	edx,offs _text_cwde
	jz	@@done
	cmp	al,99h
	mov	edx,offs _text_cdq
	jz	@@done
	mov	edx,offs _text_none
@@done:	jmp	put_string
_type_ALDX:
	call	put_tab
	mov	edx,offs _text_aldx
	jmp	put_string
_type_DXAL:
	call	put_tab
	mov	edx,offs _text_dxal
	jmp	put_string
_type_eAXDX:
	call	put_tab
	cmp	_opsiz,0
	mov	edx,offs _text_axdx
	jnz	@@l1
	mov	edx,offs _text_eaxdx
@@l1:	jmp	put_string
_type_DXeAX:
	call	put_tab
	cmp	_opsiz,0
	mov	edx,offs _text_dxax
	jnz	@@l1
	mov	edx,offs _text_dxeax
@@l1:	jmp	put_string
_type_jcxz:
	cmp	_adrsiz,0
	jz	@@l1
	mov	edx,offs _text_jcxz
	cmp	wptr _ecx,0
	setz	_jump_taken
	jmp	@@l2
@@l1:	mov	edx,offs _text_jecxz
	cmp	dptr _ecx,0
	setz	_jump_taken
@@l2:	call	put_string
	jmp	_type_Jb
_type_strb:
	mov	bptr [edi],'b'
	inc	edi
	jmp	_type_str
_type_strd:
	cmp	_opsiz,0
	mov	al,'w'
	jnz	@@l1
	mov	al,'d'
@@l1:	mov	[edi],al
	inc	edi
_type_str:
	cmp	_prefix,03h
	jz	_type_print
	mov	bptr [edi],' '
	inc	edi
	jmp	put_prefix
_type_print:
	ret




;----------------------------------
_type_Ea:
	call	put_tab
	call	put_textal
	call	decode_mode
	call	decode_by_mod
	jmp	put_memd
_type_RdCd:
	call	put_tab
	call	put_textal
	call	decode_mode
	movzx	ebx,ch
	lea	edx,_crtab386[ebx*4]
	call	put_string
	call	put_comma
	movzx	ebx,cl
	lea	edx,_regtab32[ebx*4]
	jmp	put_string
_type_RdDd:
	call	put_tab
	call	put_textal
	call	decode_mode
	movzx	ebx,ch
	lea	edx,_drtab386[ebx*4]
	call	put_string
	call	put_comma
	movzx	ebx,cl
	lea	edx,_regtab32[ebx*4]
	jmp	put_string
_type_RdTd:
	call	put_tab
	call	put_textal
	call	decode_mode
	movzx	ebx,ch
	lea	edx,_trtab386[ebx*4]
	call	put_string
	call	put_comma
	movzx	ebx,cl
	lea	edx,_regtab32[ebx*4]
	jmp	put_string
_type_CdRd:
	call	put_tab
	call	put_textal
	call	decode_mode
	movzx	ebx,cl
	lea	edx,_regtab32[ebx*4]
	call	put_string
	call	put_comma
	movzx	ebx,ch
	lea	edx,_crtab386[ebx*4]
	jmp	put_string
_type_DdRd:
	call	put_tab
	call	put_textal
	call	decode_mode
	movzx	ebx,cl
	lea	edx,_regtab32[ebx*4]
	call	put_string
	call	put_comma
	movzx	ebx,ch
	lea	edx,_drtab386[ebx*4]
	jmp	put_string
_type_TdRd:
	call	put_tab
	call	put_textal
	call	decode_mode
	movzx	ebx,cl
	lea	edx,_regtab32[ebx*4]
	call	put_string
	call	put_comma
	movzx	ebx,ch
	lea	edx,_trtab386[ebx*4]
	jmp	put_string


_escape:
	mov	edx,offs _text_esc
	call	put_string
	jmp	_type_byte
_invalid:
	push	esi
	dec	esi
	call	load_byte
	pop	esi
	mov	edx,offs _text_byte
	call	put_string
	jmp	_type_byte
_type_esc:					; FPU escape code
	call	put_textal
_type_byte:					; invalid op-code: print  DB
	call	put_tab
	call	makehexal
	jmp	put_charh
_type_aamd:
	call	put_string
	call	put_textal
	cmp	al,0Ah
	jz	@@1
	call	put_tab
	call	makehexal
	call	put_charh
@@1:	ret


.DATA
;屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯

⌨️ 快捷键说明

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