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

📄 wmove.s

📁 操作系统SunOS 4.1.3版本的源码
💻 S
字号:
	.seg	"data"	.asciz	"@(#)wmove.s 1.1 92/07/30 Copyr 1987 Sun Micro"	.seg	"text"!	Copyright (c) 1987 by Sun Microsystems, Inc.#include <sun4/asm_linkage.h>!	wmove(int), wremove()!.global	_wmove, _wremove.global	_board, _pval, _amp, _flag, _eppos, _value, _wkpos.global	_game! r0 -> o0! r1 -> i1! r2 -> i2! r3 -> i3! r4 -> i4#define r_board	%l0#define r_amp	%l1#define r_flag	%l2#define	r_eppos	%l3#define r_value	%l4_wmove:	save	%sp, -SA(MINFRAME), %sp	set	_board, r_board	set	_amp, r_amp	set	_flag, r_flag	set	_eppos, r_eppos	set	_value, r_value	ld	[r_amp], %i4		! mov	_amp,r4	and	%i0, 0xff, %i3		! movb	2(sp),r3	/ to	srl	%i0, 8, %i2	and	%i2, 0xff, %i2		! movb	3(sp),r2	/ from	ldsh	[r_value], %g1	sth	%g1, [%i4]		! mov	_value,(r4)+	lduh	[r_flag], %g1	sth	%g1, [%i4 + 2]		! mov	_flag,(r4)+	ldsh	[r_eppos], %g1	sth	%g1, [%i4 + 4]		! mov	_eppos,(r4)+	sth	%i2, [%i4 + 6]		! mov	r2,(r4)+	sth	%i3, [%i4 + 8]		! mov	r3,(r4)+	sll	%i2, 1, %i2		! asl	r2	/ from as a word index	sll	%i3, 1, %i3		! asl	r3	/ to as word index	ldsh	[r_board + %i3], %o0	! mov	_board(r3),r0	sth	%o0, [%i4 + 10]		! mov	r0,(r4)+	tst	%o0	be	1f			! beq	1f	add	%i4, 12, %i4	sll	%o0, 1, %o0		! asl	r0	ldsh	[r_value], %g1	set	_pval+12, %g2	ldsh	[%g2 + %o0], %g2	sub	%g1, %g2, %g1	sth	%g1, [r_value]		! sub	_pval+12.(r0),_value1:	ldsh	[r_board + %i2], %o0	! mov	_board(r2),r0	sth	%o0, [r_board + %i3]	! mov	r0,_board(r3)	clrh	[r_board + %i2]		! clr	_board(r2)	mov	-1, %g1	sth	%g1, [r_eppos]		! mov	$-1,_eppos	sll	%o0, 2, %o0		! asl	r0	tst	%o0	bge	error			! bge	error	.empty	set	0f, %g1	ld	[%g1 + %o0], %g1	jmp	%g1			! jmp	*0f(r0)	/ type of man	nop					! start:	.word	kmove			! .word	kmove-start	.word	qmove			! .word	qmove-start	.word	rmove			! .word	rmove-start	.word	bmove			! .word	bmove-start	.word	nmove			! .word	nmove-start	.word	pmove			! .word	pmove-start0:error:	call	_abort			! 3	noppmove:	subcc	%i2, %i3, %i2		! sub	r3,r2	bl,a	1f			! bge	1f	neg	%i2			! neg	r21:	cmp	%i2, 2*1		! cmp	r2,$2*1		/ ep capture	bne	1f			! bne	1f	nop	clrh	[r_board + %i3]		! clr	_board(r3)	add	r_board, -16, %g1	mov	-1, %g2	sth	%g2, [%g1 + %i3]	! mov	$-1,_board-16.(r3)	mov	4, %g1	sth	%g1, [%i4]		! mov	$4,(r4)+	add	%i4, 2, %i4	st	%i4, [r_amp]		! mov	r4,_amp	ret	restore				! rts	pc1:	cmp	%i2, 2*16		! cmp	r2,$2*16.	/ double move	bne	1f			! bne	1f	nop	srl	%i0, 8, %i2	and	%i2, 0xff, %i2		! movb	3(sp),r2	sub	%i2, 8, %i2		! sub	$8,r2	b	move	sth	%i2, [r_eppos]		! mov	r2,_eppos					! br	move1:	cmp	%i3, 24*2		! cmp	r3,$24.*2	bge	move			! bge	move	nop	ldsh	[r_value], %g1	sub	%g1, 25, %g1	sth	%g1, [r_value]		! sub	$25.,_value	cmp	%i3, 16*2		! cmp	r3,$16.*2	bge	move			! bge	move	nop	ldsh	[r_value], %g1	sub	%g1, 50, %g1	sth	%g1, [r_value]		! sub	$50.,_value	cmp	%i3, 8*2		! cmp	r3,$8.*2    / queen promotion	bge	move			! bge	move	nop	ldsh	[r_value], %g1	sub	%g1, 625, %g1	sth	%g1, [r_value]		! sub	$625.,_value	mov	-5, %g1	sth	%g1, [r_board + %i3]	! mov	$-5,_board(r3)	mov	5, %g1	sth	%g1, [%i4]	add	%i4, 2, %i4		! mov	$5,(r4)+	st	%i4, [r_amp]		! mov	r4,_amp	ret	restore				! rts	pcrmove:	cmp	%i2, 2*63		! cmp	r2,$2*63.	bne	1f			! bne	1f	nop	lduh	[r_flag], %g1	bclr	01, %g1	b	move	sth	%g1, [r_flag]		! bic	$1,_flag					! br	move1:	cmp	%i2, (2*56)		! cmp	r2,$2*56.	bne	move			! bne	move	nop	lduh	[r_flag], %g1	bclr	02, %g1	b	move	sth	%g1, [r_flag]		! bic	$2,_flag					! br	movekmove:	srl	%i3, 1, %i3		! asr	r3	sethi	%hi(_wkpos), %g1	sth	%i3, [%g1 + %lo(_wkpos)]! mov	r3,_wkpos	lduh	[r_flag], %g1	bclr	03, %g1	sth	%g1, [r_flag]		! bic	$3,_flag	cmp	%i2, 2*60		! cmp	r2,$2*60.	bne	2f			! bne	2f	cmp	%i3, 62			! cmp	r3,$62	/ kingside castle	bne	1f			! bne	1f	nop	ldsh	[r_value], %g1	sub	%g1, 1, %g1	sth	%g1, [r_value]		! dec	_value	mov	-4, %g1	sth	%g1, [r_board + (2*61)]	! mov	$-4,_board+[2*61.]	clrh	[r_board + (2*63)]	! clr	_board+[2*63.]	mov	2, %g1	sth	%g1, [%i4]	add	%i4, 2, %i4		! mov	$2,(r4)+	st	%i4, [r_amp]		! mov	r4,_amp	ret	restore				! rts	pc1:	cmp	%i3, 58			! cmp	r3,$58.	/ queenside castle	bne	2f			! bne	2f	nop	ldsh	[r_value], %g1	sub	%g1, 1, %g1	sth	%g1, [r_value]		! dec	_value	mov	-4, %g1	sth	%g1, [r_board + (2*59)]	! mov	$-4,_board+[2*59.]	clrh	[r_board + (2*56)]	! clr	_board+[2*56.]	mov	3, %g1	sth	%g1, [%i4]	add	%i4, 2, %i4		! mov	$3,(r4)+	st	%i4, [r_amp]		! mov	r4,_amp	ret	restore				! rts	pc2:					! 	/ king move	sethi	%hi(_game), %g1	ldsh	[%g1 + %lo(_game)], %g1	tst	%g1			! tst	_game	bne	1f			! bne	1f	clrh	[%i4]			!	delay slot	ldsh	[r_value], %g1	add	%g1, 2, %g1	sth	%g1, [r_value]		! add	$2,_value1:	add	%i4, 2, %i4		! clr	(r4)+	st	%i4, [r_amp]		! mov	r4,_amp	ret	restore				! rts	pcqmove:	sethi	%hi(_game), %g1	ldsh	[%g1 + %lo(_game)], %g1	tst	%g1			! tst	_game	bne	move			! bne	move	nop	ldsh	[r_value], %g1	add	%g1, 1, %g1	sth	%g1, [r_value]		! inc	_value					! br	movenmove:bmove:move:	mov	1, %g1	sth	%g1, [%i4]	add	%i4, 2, %i4		! mov	$1,(r4)+	st	%i4, [r_amp]		! mov	r4,_amp	ret	restore				! rts	pc_wremove:	save	%sp, -SA(MINFRAME), %sp	set	_board, r_board	set	_amp, r_amp	ld	[r_amp], %i4		! mov	_amp,r4	ldsh	[%i4 - 2], %o0		! mov	-(r4),r0	ldsh	[%i4 - 4], %i1		! mov	-(r4),r1	ldsh	[%i4 - 6], %i3		! mov	-(r4),r3	ldsh	[%i4 - 8], %i2		! mov	-(r4),r2	ldsh	[%i4 - 10], %g1	sethi	%hi(_eppos), %g2	sth	%g1, [%g2 + %lo(_eppos)]! mov	-(r4),_eppos	lduh	[%i4 - 12], %g1	sethi	%hi(_flag), %g2	sth	%g1, [%g2 + %lo(_flag)]	! mov	-(r4),_flag	ldsh	[%i4 - 14], %g1	sethi	%hi(_value), %g2	sth	%g1, [%g2 + %lo(_value)]! mov	-(r4),_value	sub	%i4, 14, %i4	st	%i4, [r_amp]		! mov	r4,_amp	sll	%i2, 1, %i2		! asl	r2	sll	%i3, 1, %i3		! asl	r3	ldsh	[r_board + %i3], %g1	sth	%g1, [r_board + %i2]	! mov	_board(r3),_board(r2)	sth	%i1, [r_board + %i3]	! mov	r1,_board(r3)	sll	%o0, 2, %o0		! asl	r0	set	0f, %g1	ld	[%g1 + %o0], %g1	jmp	%g1			! jmp	*0f(r0)	nop0:	.word	movek			! .word	movek-0b	.word	movex			! .word	movex-0b	.word	moveo			! .word	moveo-0b	.word	moveoo			! .word	moveoo-0b	.word	movep			! .word	movep-0b	.word	moveq			! .word	moveq-0bmovek:	srl	%i2, 1, %i2		! asr	r2	sethi	%hi(_wkpos), %g1	sth	%i2, [%g1 + %lo(_wkpos)]! mov	r2,_wkposmovex:	ret	restore				! rts	pcmoveo:	mov	-4, %g2	sth	%g2, [r_board + (2*63)]	! mov	$-4,_board+[2*63.]	clrh	[r_board + (2*61)]	! clr	_board+[2*61.]	mov	60, %g2	sethi	%hi(_wkpos), %g1	sth	%g2, [%g1 + %lo(_wkpos)]! mov	$60.,_wkpos	ret	restore				! rts	pcmoveoo:	mov	-4, %g2	sth	%g2, [r_board + (2*56)]	! mov	$-4,_board+[2*56.]	clrh	[r_board + (2*59)]	! clr	_board+[2*59.]	mov	60, %g2	sethi	%hi(_wkpos), %g1	sth	%g2, [%g1 + %lo(_wkpos)]! mov	$60.,_wkpos	ret	restore				! rts	pcmovep:	mov	-1, %g2	sth	%g2, [r_board + %i2]	! mov	$-1,_board(r2)	sub	r_board, (2*8), %g1	clrh	[%g1 + %i3]		! clr	_board-[2*8.](r3)	ret	restore				! rts	pcmoveq:	mov	-1, %g2	sth	%g2, [r_board + %i2]	! mov	$-1,_board(r2)	ret	restore				! rts	pc

⌨️ 快捷键说明

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