far-hc11.s

来自「GNU binutils是GNU交叉工具链中的一个源码包」· S 代码 · 共 106 行

S
106
字号
;;; Test 68HC11 FAR trampoline generation;;; 2 trampolines are generated:;;; - one for '_far_bar';;; - one for '_far_foo';;; 'far_no_tramp' does not have any trampoline generated.;;;	.sect .text	.globl _start_start:start:		lds	#stack	ldx	#0xabcd	pshx	ldd	#0x1234	ldx	#0x5678	bsr	_far_bar	; Call to trampoline generated code	cpx	#0x1234	bne	fail		; X and D preserved (swapped by _far_bar)	cpd	#0x5678	bne	fail	pulx	cpx	#0xabcd		; Stack parameter preserved	bne	fail	ldd	#_far_foo	; Get address of trampoline handler	xgdx	jsr	0,x	ldd	#_far_bar	; Likewise (unique trampoline check)	xgdy	jsr	0,y	ldaa	#%page(_far_no_tramp)	ldy	#%addr(_far_no_tramp)	bsr	__call_a16	; No trampoline generated for _far_no_tramp	clra	clrb	waifail:	ldd	#1	wai	bra	start	.global	__return__return:	ins	rts	.sect .bank1,"ax"	.globl _far_bar	.far _far_bar		; Must mark symbol as far_far_bar:	jsr	local_bank1	xgdx	jmp	__returnlocal_bank1:	rts	.sect .bank2,"ax"	.globl _far_foo	.far _far_foo_far_foo:	jsr	local_bank2	jmp	__returnlocal_bank2:	rts	.sect .bank3,"ax"	.globl _far_no_tramp	.far _far_no_tramp_far_no_tramp:	jsr	local_bank3	jmp	__returnlocal_bank3:	rts	.sect .text	.globl __far_trampoline__far_trampoline:	psha				; (2) Save function parameter (high)	;; <Read current page in A>	psha				; (2)	;; <Set currenge page from B>	pshx				; (4)	tsx				; (3)	ldab	4,x			; (4) Restore function parameter (low)	ldaa	2,x			; (4) Get saved page number	staa	4,x			; (4) Save it below return PC	pulx				; (5)	pula				; (3)	pula				; (3) Restore function parameter (high)	jmp	0,y			; (4)	.globl __call_a16__call_a16:	;; xgdx				; (3)	;; <Read current page in A>	; (3) ldaa _current_page	psha				; (2)	;; <Set current page from B>	; (4) staa _current_page	;; xgdx				; (3)	jmp 0,y				; (4)	.sect .page0	.skip 100stack:

⌨️ 快捷键说明

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