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

📄 isp.s

📁 linux内核源码
💻 S
📖 第 1 页 / 共 5 页
字号:
#	-(An)	- fetch An value from stack; return decr value;		##		  place decr value on stack; store old value in case of	##		  future access error; if -(a7), set mda7_flg in	##		  SPCOND_FLG						##	(An)+	- fetch An value from stack; return value;		##		  place incr value on stack; store old value in case of	##		  future access error; if (a7)+, set mia7_flg in	##		  SPCOND_FLG						##	(d16,An) - fetch An value from stack; read d16 using		##		  _imem_read_word(); fetch may fail -> branch to	##		  isp_iacc()						##	(xxx).w,(xxx).l - use _imem_read_{word,long}() to fetch		##		  address; fetch may fail				##	#<data> - return address of immediate value; set immed_flg	##		  in SPCOND_FLG						##	(d16,PC) - fetch stacked PC value; read d16 using		##		  _imem_read_word(); fetch may fail -> branch to	##		  isp_iacc()						##	everything else - read needed displacements as appropriate w/	##		  _imem_read_{word,long}(); read may fail; if memory	##		  indirect, read indirect address using			##		  _dmem_read_long() which may also fail			##									##########################################################################	global		_calc_ea_calc_ea:	mov.l		%d0,%a0			# move # bytes to a0# MODE and REG are taken from the EXC_OPWORD.	mov.w		EXC_OPWORD(%a6),%d0	# fetch opcode word	mov.w		%d0,%d1			# make a copy	andi.w		&0x3f,%d0		# extract mode field	andi.l		&0x7,%d1		# extract reg  field# jump to the corresponding function for each {MODE,REG} pair.	mov.w		(tbl_ea_mode.b,%pc,%d0.w*2), %d0 # fetch jmp distance	jmp		(tbl_ea_mode.b,%pc,%d0.w*1) # jmp to correct ea mode	swbeg		&64tbl_ea_mode:	short		tbl_ea_mode	-	tbl_ea_mode	short		tbl_ea_mode	-	tbl_ea_mode	short		tbl_ea_mode	-	tbl_ea_mode	short		tbl_ea_mode	-	tbl_ea_mode	short		tbl_ea_mode	-	tbl_ea_mode	short		tbl_ea_mode	-	tbl_ea_mode	short		tbl_ea_mode	-	tbl_ea_mode	short		tbl_ea_mode	-	tbl_ea_mode	short		tbl_ea_mode	-	tbl_ea_mode	short		tbl_ea_mode	-	tbl_ea_mode	short		tbl_ea_mode	-	tbl_ea_mode	short		tbl_ea_mode	-	tbl_ea_mode	short		tbl_ea_mode	-	tbl_ea_mode	short		tbl_ea_mode	-	tbl_ea_mode	short		tbl_ea_mode	-	tbl_ea_mode	short		tbl_ea_mode	-	tbl_ea_mode	short		addr_ind_a0	-	tbl_ea_mode	short		addr_ind_a1	-	tbl_ea_mode	short		addr_ind_a2	-	tbl_ea_mode	short		addr_ind_a3	-	tbl_ea_mode	short		addr_ind_a4	-	tbl_ea_mode	short		addr_ind_a5	-	tbl_ea_mode	short		addr_ind_a6	-	tbl_ea_mode	short		addr_ind_a7	-	tbl_ea_mode	short		addr_ind_p_a0	-	tbl_ea_mode	short		addr_ind_p_a1	-	tbl_ea_mode	short		addr_ind_p_a2	-	tbl_ea_mode	short		addr_ind_p_a3	-	tbl_ea_mode	short		addr_ind_p_a4	-	tbl_ea_mode	short		addr_ind_p_a5	-	tbl_ea_mode	short		addr_ind_p_a6	-	tbl_ea_mode	short		addr_ind_p_a7	-	tbl_ea_mode	short		addr_ind_m_a0		-	tbl_ea_mode	short		addr_ind_m_a1		-	tbl_ea_mode	short		addr_ind_m_a2		-	tbl_ea_mode	short		addr_ind_m_a3		-	tbl_ea_mode	short		addr_ind_m_a4		-	tbl_ea_mode	short		addr_ind_m_a5		-	tbl_ea_mode	short		addr_ind_m_a6		-	tbl_ea_mode	short		addr_ind_m_a7		-	tbl_ea_mode	short		addr_ind_disp_a0	-	tbl_ea_mode	short		addr_ind_disp_a1	-	tbl_ea_mode	short		addr_ind_disp_a2	-	tbl_ea_mode	short		addr_ind_disp_a3	-	tbl_ea_mode	short		addr_ind_disp_a4	-	tbl_ea_mode	short		addr_ind_disp_a5	-	tbl_ea_mode	short		addr_ind_disp_a6	-	tbl_ea_mode	short		addr_ind_disp_a7	-	tbl_ea_mode	short		_addr_ind_ext		-	tbl_ea_mode	short		_addr_ind_ext		-	tbl_ea_mode	short		_addr_ind_ext		-	tbl_ea_mode	short		_addr_ind_ext		-	tbl_ea_mode	short		_addr_ind_ext		-	tbl_ea_mode	short		_addr_ind_ext		-	tbl_ea_mode	short		_addr_ind_ext		-	tbl_ea_mode	short		_addr_ind_ext		-	tbl_ea_mode	short		abs_short		-	tbl_ea_mode	short		abs_long		-	tbl_ea_mode	short		pc_ind			-	tbl_ea_mode	short		pc_ind_ext		-	tbl_ea_mode	short		immediate		-	tbl_ea_mode	short		tbl_ea_mode		-	tbl_ea_mode	short		tbl_ea_mode		-	tbl_ea_mode	short		tbl_ea_mode		-	tbl_ea_mode#################################### Address register indirect: (An) ####################################addr_ind_a0:	mov.l		EXC_A0(%a6),%a0		# Get current a0	rtsaddr_ind_a1:	mov.l		EXC_A1(%a6),%a0		# Get current a1	rtsaddr_ind_a2:	mov.l		EXC_A2(%a6),%a0		# Get current a2	rtsaddr_ind_a3:	mov.l		EXC_A3(%a6),%a0		# Get current a3	rtsaddr_ind_a4:	mov.l		EXC_A4(%a6),%a0		# Get current a4	rtsaddr_ind_a5:	mov.l		EXC_A5(%a6),%a0		# Get current a5	rtsaddr_ind_a6:	mov.l		EXC_A6(%a6),%a0		# Get current a6	rtsaddr_ind_a7:	mov.l		EXC_A7(%a6),%a0		# Get current a7	rts###################################################### Address register indirect w/ postincrement: (An)+ ######################################################addr_ind_p_a0:	mov.l		%a0,%d0			# copy no. bytes	mov.l		EXC_A0(%a6),%a0		# load current value	add.l		%a0,%d0			# increment	mov.l		%d0,EXC_A0(%a6)		# save incremented value	mov.l		%a0,EXC_SAVVAL(%a6)	# save in case of access error	mov.b		&0x0,EXC_SAVREG(%a6)	# save regno, too	mov.b		&restore_flg,SPCOND_FLG(%a6) # set flag	rtsaddr_ind_p_a1:	mov.l		%a0,%d0			# copy no. bytes	mov.l		EXC_A1(%a6),%a0		# load current value	add.l		%a0,%d0			# increment	mov.l		%d0,EXC_A1(%a6)		# save incremented value	mov.l		%a0,EXC_SAVVAL(%a6)	# save in case of access error	mov.b		&0x1,EXC_SAVREG(%a6)	# save regno, too	mov.b		&restore_flg,SPCOND_FLG(%a6) # set flag	rtsaddr_ind_p_a2:	mov.l		%a0,%d0			# copy no. bytes	mov.l		EXC_A2(%a6),%a0		# load current value	add.l		%a0,%d0			# increment	mov.l		%d0,EXC_A2(%a6)		# save incremented value	mov.l		%a0,EXC_SAVVAL(%a6)	# save in case of access error	mov.b		&0x2,EXC_SAVREG(%a6)	# save regno, too	mov.b		&restore_flg,SPCOND_FLG(%a6) # set flag	rtsaddr_ind_p_a3:	mov.l		%a0,%d0			# copy no. bytes	mov.l		EXC_A3(%a6),%a0		# load current value	add.l		%a0,%d0			# increment	mov.l		%d0,EXC_A3(%a6)		# save incremented value	mov.l		%a0,EXC_SAVVAL(%a6)	# save in case of access error	mov.b		&0x3,EXC_SAVREG(%a6)	# save regno, too	mov.b		&restore_flg,SPCOND_FLG(%a6) # set flag	rtsaddr_ind_p_a4:	mov.l		%a0,%d0			# copy no. bytes	mov.l		EXC_A4(%a6),%a0		# load current value	add.l		%a0,%d0			# increment	mov.l		%d0,EXC_A4(%a6)		# save incremented value	mov.l		%a0,EXC_SAVVAL(%a6)	# save in case of access error	mov.b		&0x4,EXC_SAVREG(%a6)	# save regno, too	mov.b		&restore_flg,SPCOND_FLG(%a6) # set flag	rtsaddr_ind_p_a5:	mov.l		%a0,%d0			# copy no. bytes	mov.l		EXC_A5(%a6),%a0		# load current value	add.l		%a0,%d0			# increment	mov.l		%d0,EXC_A5(%a6)		# save incremented value	mov.l		%a0,EXC_SAVVAL(%a6)	# save in case of access error	mov.b		&0x5,EXC_SAVREG(%a6)	# save regno, too	mov.b		&restore_flg,SPCOND_FLG(%a6) # set flag	rtsaddr_ind_p_a6:	mov.l		%a0,%d0			# copy no. bytes	mov.l		EXC_A6(%a6),%a0		# load current value	add.l		%a0,%d0			# increment	mov.l		%d0,EXC_A6(%a6)		# save incremented value	mov.l		%a0,EXC_SAVVAL(%a6)	# save in case of access error	mov.b		&0x6,EXC_SAVREG(%a6)	# save regno, too	mov.b		&restore_flg,SPCOND_FLG(%a6) # set flag	rtsaddr_ind_p_a7:	mov.b		&mia7_flg,SPCOND_FLG(%a6) # set "special case" flag	mov.l		%a0,%d0			# copy no. bytes	mov.l		EXC_A7(%a6),%a0		# load current value	add.l		%a0,%d0			# increment	mov.l		%d0,EXC_A7(%a6)		# save incremented value	rts##################################################### Address register indirect w/ predecrement: -(An) #####################################################addr_ind_m_a0:	mov.l		EXC_A0(%a6),%d0		# Get current a0	mov.l		%d0,EXC_SAVVAL(%a6)	# save in case of access error	sub.l		%a0,%d0			# Decrement	mov.l		%d0,EXC_A0(%a6)		# Save decr value	mov.l		%d0,%a0	mov.b		&0x0,EXC_SAVREG(%a6)	# save regno, too	mov.b		&restore_flg,SPCOND_FLG(%a6) # set flag	rtsaddr_ind_m_a1:	mov.l		EXC_A1(%a6),%d0		# Get current a1	mov.l		%d0,EXC_SAVVAL(%a6)	# save in case of access error	sub.l		%a0,%d0			# Decrement	mov.l		%d0,EXC_A1(%a6)		# Save decr value	mov.l		%d0,%a0	mov.b		&0x1,EXC_SAVREG(%a6)	# save regno, too	mov.b		&restore_flg,SPCOND_FLG(%a6) # set flag	rtsaddr_ind_m_a2:	mov.l		EXC_A2(%a6),%d0		# Get current a2	mov.l		%d0,EXC_SAVVAL(%a6)	# save in case of access error	sub.l		%a0,%d0			# Decrement	mov.l		%d0,EXC_A2(%a6)		# Save decr value	mov.l		%d0,%a0	mov.b		&0x2,EXC_SAVREG(%a6)	# save regno, too	mov.b		&restore_flg,SPCOND_FLG(%a6) # set flag	rtsaddr_ind_m_a3:	mov.l		EXC_A3(%a6),%d0		# Get current a3	mov.l		%d0,EXC_SAVVAL(%a6)	# save in case of access error	sub.l		%a0,%d0			# Decrement	mov.l		%d0,EXC_A3(%a6)		# Save decr value	mov.l		%d0,%a0	mov.b		&0x3,EXC_SAVREG(%a6)	# save regno, too	mov.b		&restore_flg,SPCOND_FLG(%a6) # set flag	rtsaddr_ind_m_a4:	mov.l		EXC_A4(%a6),%d0		# Get current a4	mov.l		%d0,EXC_SAVVAL(%a6)	# save in case of access error	sub.l		%a0,%d0			# Decrement	mov.l		%d0,EXC_A4(%a6)		# Save decr value	mov.l		%d0,%a0	mov.b		&0x4,EXC_SAVREG(%a6)	# save regno, too	mov.b		&restore_flg,SPCOND_FLG(%a6) # set flag	rtsaddr_ind_m_a5:	mov.l		EXC_A5(%a6),%d0		# Get current a5	mov.l		%d0,EXC_SAVVAL(%a6)	# save in case of access error	sub.l		%a0,%d0			# Decrement	mov.l		%d0,EXC_A5(%a6)		# Save decr value	mov.l		%d0,%a0	mov.b		&0x5,EXC_SAVREG(%a6)	# save regno, too	mov.b		&restore_flg,SPCOND_FLG(%a6) # set flag	rtsaddr_ind_m_a6:	mov.l		EXC_A6(%a6),%d0		# Get current a6	mov.l		%d0,EXC_SAVVAL(%a6)	# save in case of access error	sub.l		%a0,%d0			# Decrement	mov.l		%d0,EXC_A6(%a6)		# Save decr value	mov.l		%d0,%a0	mov.b		&0x6,EXC_SAVREG(%a6)	# save regno, too	mov.b		&restore_flg,SPCOND_FLG(%a6) # set flag	rtsaddr_ind_m_a7:	mov.b		&mda7_flg,SPCOND_FLG(%a6) # set "special case" flag	mov.l		EXC_A7(%a6),%d0		# Get current a7	sub.l		%a0,%d0			# Decrement	mov.l		%d0,EXC_A7(%a6)		# Save decr value	mov.l		%d0,%a0	rts######################################################### Address register indirect w/ displacement: (d16, An) #########################################################addr_ind_disp_a0:	mov.l		EXC_EXTWPTR(%a6),%a0	# fetch instruction addr	addq.l		&0x2,EXC_EXTWPTR(%a6)	# incr instruction ptr	bsr.l		_imem_read_word	tst.l		%d1			# ifetch error?	bne.l		isp_iacc		# yes	mov.w		%d0,%a0			# sign extend displacement	add.l		EXC_A0(%a6),%a0		# a0 + d16	rtsaddr_ind_disp_a1:	mov.l		EXC_EXTWPTR(%a6),%a0	# fetch instruction addr	addq.l		&0x2,EXC_EXTWPTR(%a6)	# incr instruction ptr	bsr.l		_imem_read_word	tst.l		%d1			# ifetch error?	bne.l		isp_iacc		# yes	mov.w		%d0,%a0			# sign extend displacement	add.l		EXC_A1(%a6),%a0		# a1 + d16	rtsaddr_ind_disp_a2:	mov.l		EXC_EXTWPTR(%a6),%a0	# fetch instruction addr	addq.l		&0x2,EXC_EXTWPTR(%a6)	# incr instruction ptr	bsr.l		_imem_read_word	tst.l		%d1			# ifetch error?	bne.l		isp_iacc		# yes	mov.w		%d0,%a0			# sign extend displacement	add.l		EXC_A2(%a6),%a0		# a2 + d16	rtsaddr_ind_disp_a3:	mov.l		EXC_EXTWPTR(%a6),%a0	# fetch instruction addr	addq.l		&0x2,EXC_EXTWPTR(%a6)	# incr instruction ptr	bsr.l		_imem_read_word	tst.l		%d1			# ifetch error?	bne.l		isp_iacc		# yes	mov.w		%d0,%a0			# sign extend displacement	add.l		EXC_A3(%a6),%a0		# a3 + d16	rtsaddr_ind_disp_a4:	mov.l		EXC_EXTWPTR(%a6),%a0	# fetch instruction addr	addq.l		&0x2,EXC_EXTWPTR(%a6)	# incr instruction ptr	bsr.l		_imem_read_word	tst.l		%d1			# ifetch error?	bne.l		isp_iacc		# yes	mov.w		%d0,%a0			# sign extend displacement	add.l		EXC_A4(%a6),%a0		# a4 + d16	rtsaddr_ind_disp_a5:	mov.l		EXC_EXTWPTR(%a6),%a0	# fetch instruction addr	addq.l		&0x2,EXC_EXTWPTR(%a6)	# incr instruction ptr	bsr.l		_imem_read_word	tst.l		%d1			# ifetch error?	bne.l		isp_iacc		# yes	mov.w		%d0,%a0			# sign extend displacement	add.l		EXC_A5(%a6),%a0		# a5 + d16	rtsaddr_ind_disp_a6:	mov.l		EXC_EXTWPTR(%a6),%a0	# fetch instruction addr	addq.l		&0x2,EXC_EXTWPTR(%a6)	# incr instruction ptr	bsr.l		_imem_read_word	tst.l		%d1			# ifetch error?	bne.l		isp_iacc		# yes	mov.w		%d0,%a0			# sign extend displacement	add.l		EXC_A6(%a6),%a0		# a6 + d16	rtsaddr_ind_disp_a7:	mov.l		EXC_EXTWPTR(%a6),%a0	# fetch instruction addr	addq.l		&0x2,EXC_EXTWPTR(%a6)	# incr instruction ptr	bsr.l		_imem_read_word	tst.l		%d1			# ifetch error?	bne.l		isp_iacc		# yes	mov.w		%d0,%a0			# sign extend displacement	add.l		EXC_A7(%a6),%a0		# a7 + d16	rts######################################################################### Address register indirect w/ index(8-bit displacement): (dn, An, Xn) ##    "       "         "    w/   "  (base displacement): (bd, An, Xn)  ## Memory indirect postindexed: ([bd, An], Xn, od)		       ## Memory indirect preindexed: ([bd, An, Xn], od)		       #########################################################################_addr_ind_ext:	mov.l		%d1,-(%sp)	mov.l		EXC_EXTWPTR(%a6),%a0	# fetch instruction addr	addq.l		&0x2,EXC_EXTWPTR(%a6)	# incr instruction ptr	bsr.l		_imem_read_word		# fetch extword in d0	tst.l		%d1			# ifetch error?	bne.l		isp_iacc		# yes	mov.l		(%sp)+,%d1

⌨️ 快捷键说明

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