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

📄 it18.asm

📁 可移植的MicroChip的PIC全系列单片机软件仿真器
💻 ASM
字号:
	;; it.asm	;;	;; The purpose of this program is to test how well gpsim can simulate	;; a 16bit-core pic (like the 18cxxx family not the 17c family.	;; Nothing useful is performed - this program is only used to	;; debug gpsim.	include "p18c242.inc"  cblock  0	temp,temp1,temp2  endc		org 0	clrf	temp1		;Assume clrf works...				;start:		;; Perform some basic tests on some important instructions	setc			;set the Carry flag	skpc			;and verify that it happened	 bra	$	clrc			;Now try clearing the carry	skpnc	 bra	$	setz			;set the Zero flag	skpz			;and verify that it happened	 bra	$	clrz			;Now try clearing it	skpnz	 bra	$		setdc			;set the Digit Carry flag	skpdc			;and verify that it happened	 bra	$	clrdc			;Now try clearing it	skpndc	 bra	$	setov			;set the Over Flow flag	skpov			;and verify that it happened	 bra	$	clrov			;Now try clearing it	skpnov	 bra	$	setn			;set the negative flag	skpn			;and verify that it happened	 bra	$	clrn			;Now try clearing it	skpnn	 bra	$	movlw	1	movwf	temp	movf	temp,f	skpnz	 bra	$	movlw	0	movwf	temp	movf	temp,f	skpz	 bra   $		clrf	temp		;Clear a register	skpz			;and verify that the Z bit in the	 bra	$		;status register was set.	movf	temp,w		;Read the register that was just	skpz			;cleared, and again verify that Z	 bra	$		;was set	incf	temp,w		;Now this should cause the Z bit to	skpnz			;get cleared.	 bra	$	movlw	0xff	movwf	temp	incf	temp	skpz	 bra	$	;;	;; incfsz	;;	movlw	0xff	movwf	temp	movf	temp,f		;Should clear Z	incfsz	temp,w	 bra	$	skpnz			;incfsz shouldn't affect Z	 bra	$	incfsz	temp,f		;temp should now be zero	 bra	$	incfsz	temp,w		;the following inst. shouldn't be skipped	 skpnz			;Z should be clear from above.	  bra	$				;; 	;; addwf test:	;;	;; The purpose of this test is to a) verify that the addwf instruction	;; adds correctly and b) that the appropriate status register bits are	;; set correctly.	clrw	clrf	temp		addwf	temp,w		; 0+0	skpnc	 bra	$	skpz	 bra	$	skpndc	 bra	$	movlw	1		; 0+1	addwf	temp,w		skpc	 skpnz	  bra	$	skpndc	 bra	$	skpn	 skpnov	  bra	$	movlw	8		; 8+8 , test dc	movwf	temp	addwf	temp,w		skpc	 skpnz	  bra	$	skpdc	 bra	$	skpn	 skpnov	  bra	$	movlw	0x88		; 0x88+0x88	movwf	temp	addwf	temp,w		skpnc	 skpnz	  bra	$	skpdc	 bra	$	skpn	 skpov	  bra	$	movlw	0x80		; 0x80+0x80	movwf	temp	addwf	temp,w		skpnc	 skpz	  bra	$	skpndc	 bra	$	skpn	 skpov	  bra	$	clrw	addwf	temp,w		; 0x80+0		skpc	 skpnz	  bra	$	skpndc	 bra	$	skpnn	 skpov	  bra	$	clrf	temp	addwf	temp,w		; 0+0x80		skpc	 skpnz	  bra	$	skpndc	 bra	$	skpnn	 skpnov	  bra	$	movlw	1	movwf	temp	movlw	0xff	addwf	temp,w	skpc	 bra	$	skpz	 bra	$	skpdc	 bra	$	clrc	clrdc			;;	;; andwf test:	;;	clrf	temp	movlw	1	andwf	temp,f	skpz	 bra	$	skpc	 skpndc	  bra  $	andwf	temp,w	skpz	 bra	$	skpc	 skpndc	  bra  $	movlw	1	movwf	temp	andwf	temp,f	skpnz	 bra	$	skpc	 skpndc	  bra  $	movlw	0xff	andwf	temp,f		;1 & 0xff should = 1	skpnz	 bra	$	skpc	 skpndc	  bra  $	movlw	0xff		;Now add 0xff to see if temp	addwf	temp,f		;really is 1. (should cause a carry)	skpnz	 skpc	  bra	$	;;	;; iorwf	;;	movlw	0	movwf	temp	iorwf	temp,f	skpz	 bra	$	movlw	1	iorwf	temp,f	skpnz	 bra	$	movlw	0xff	addwf	temp,f	skpnz	 skpc	  bra	$	;;	;; rlcf	;;	clrdc	clrf	temp	clrc	rlcf	temp,w		skpdc	 skpnc	  bra	$	skpz	 bra	$	setc	rlcf	temp,f	skpdc	 skpnc	  bra	$	skpnz	 bra	$	movlw	0xff	addwf	temp,f	skpnz	 skpc	  bra	$	rlcf	temp,f	skpnc	 bra	$		movlw	0x80	movwf	temp	rlcf	temp,w	skpc	 bra	$	movwf	temp	addwf	temp,w	skpz	 bra	$	;;	;; rrcf	;;	clrdc	clrf	temp	clrc	rrcf	temp,w		skpdc	 skpnc	  bra	$	skpz	 bra	$	setc	rrcf	temp,f	skpdc	 skpnc	  bra	$	skpnz	 bra	$	movlw	0x80	addwf	temp,f	skpnz	 skpc	  bra	$	rrcf	temp,f	skpnc	 bra	$		movlw	1	movwf	temp	rrcf	temp,w	skpc	 bra	$	movwf	temp	addwf	temp,w	skpz	 bra	$	;; 	;; subwf test:	;;	clrf	wreg	clrf	temp		subwf	temp,w		; 0-0	skpc	 bra	$	skpz	 bra	$	skpdc	 bra	$	movlw	1		; 0-1	subwf	temp,w		skpnc	 bra	$	skpnz	 bra	$	skpndc	 bra	$	movlw	0x10		; 0x10-0x10	movwf	temp	subwf	temp,w		skpc	 bra	$	skpz	 bra	$	skpdc	 bra	$	movlw	0x88		; 0x88-0x88	movwf	temp	subwf	temp,w		skpc	 bra	$	skpz	 bra	$	skpdc	 bra	$	clrf	temp	movlw	0x80		; 0 - 0x80	subwf	temp,f		skpnc	 bra	$	skpnz	 bra	$	skpdc	 bra	$	movlw	0		; 0x80 - 0	subwf	temp,w	skpc	 bra	$	skpnz	 bra	$	skpdc	 bra	$	movlw	1		; 0x80 - 1	subwf	temp,w	skpc	 bra	$	skpnz	 bra	$	skpndc	 bra	$		clrc	clrdc	;; 	;; xorwf	;;	clrf	temp	movlw	0xff	xorwf	temp,f	skpc	 skpndc	  bra	$	skpnz	 bra	$	xorwf	temp,f	skpz	 bra	$	xorwf	temp,f	incfsz	temp,f	 bra	$	;;	;; swapf	;;	movlw	0x0f	movwf	temp	swapf	temp,f	xorwf	temp,f	incfsz	temp,f	 bra	$	decf	temp1,f	incfsz	temp1,w	 goto	done	;; repeat the test with in the next bank		bsf	status,rp0	goto	start	done:	bcf	status,rp0		NOP	NOP	NOP	NOP	NOP	NOP		bra	$		NOP	NOP	NOP	NOP	NOP	NOP	NOP			;;	;; Test indirect branching	;;test_pcl:		clrf	temp	clrf	temp1tt1:	movf	temp,w	call	table_test	xorwf	temp,w	skpz	 bsf	temp1,0	incf	temp,f	btfss	temp,4	 goto	tt1	goto	test_pcl2table_test:	addwf	pcl,ftable:	retlw	0	retlw	1	retlw	2	retlw	3	retlw	4	retlw	5	retlw	6	retlw	7	retlw	8	retlw	9	retlw	10	retlw	11	retlw	12	retlw	13	retlw	14	retlw	15test_pcl2:		btfsc	temp2,0	 goto	test_pcl3        movlw   0x20        movwf   fsr0l	clrf	fsr0h	next    clrf    indf0        incf    fsr0l,1        btfss   fsr0l,4        goto    next	bsf	temp2,0        clrf    pcltest_pcl3:	movlw	ly	movwf	pcl		; == goto lylx	goto	test_pcl4ly	movlw	lx	movwf	pcltest_pcl4:		goto	$	end

⌨️ 快捷键说明

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