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

📄 fp52.lst

📁 proteus6.9 sp4 上
💻 LST
📖 第 1 页 / 共 5 页
字号:
  591:	  01B0	31 F9			ACALL	INC_FP_EXP	;BUMP THE EXPONENT
  592:	  01B2	18			DEC	R0
  593:					;
  594:	  01B3	08		PACK0:	INC	R0		;POINT AT FP_ACC1
  595:					;
  596:	  01B4	74 08		PACK1:	MOV	A,#8		;ADJUST NIBBLE POINTER
  597:	  01B6	F9			MOV	R1,A
  598:	  01B7	28			ADD	A,R0
  599:	  01B8	F8			MOV	R0,A
  600:	  01B9	B6 05 00		CJNE	@R0,#5,$+3	;SEE IF ADJUSTING NEEDED
  601:	  01BC	40 13			JC	PACK3+1
  602:					;
  603:	  01BE	D3		PACK2:	SETB	C
  604:	  01BF	E4			CLR	A
  605:	  01C0	18			DEC	R0
  606:	  01C1	36			ADDC	A,@R0
  607:	  01C2	D4			DA	A
  608:	  01C3	D6			XCHD	A,@R0		;SAVE THE VALUE
  609:	  01C4	30 E4 09		JNB	ACC.4,PACK3
  610:	  01C7	D9 F5			DJNZ	R1,PACK2
  611:					;
  612:	  01C9	18			DEC	R0
  613:	  01CA	76 01			MOV	@R0,#1
  614:	  01CC	31 F9			ACALL	INC_FP_EXP
  615:	  01CE	80 06			SJMP	PACK4
  616:					;
  617:	  01D0	19		PACK3:	DEC	R1
  618:	  01D1	E9			MOV	A,R1
  619:	  01D2	C3			CLR	C
  620:	  01D3	C8			XCH	A,R0
  621:	  01D4	98			SUBB	A,R0
  622:	  01D5	F8			MOV	R0,A
  623:					;
  624:	  01D6	79 2B		PACK4:	MOV	R1,#FP_DIG12
  625:					;
  626:					; Now, pack
  627:					;
  628:	  01D8	E6		PLOOP:	MOV	A,@R0
  629:	  01D9	C4			SWAP	A		;FLIP THE DIGITS
  630:	  01DA	08			INC	R0
  631:	  01DB	D6			XCHD	A,@R0
  632:	  01DC	42 06			ORL	6,A		;ACCUMULATE THE OR'ED DIGITS
  633:	  01DE	F7			MOV	@R1,A
  634:	  01DF	08			INC	R0

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 18



 Line  I  Addr  Code            Source

  635:	  01E0	09			INC	R1
  636:	  01E1	B9 2F F4		CJNE	R1,#FP_SIGN,PLOOP
  637:	  01E4	EE			MOV	A,R6
  638:	  01E5	70 03			JNZ	STORE_ALIGN_TEST_AND_EXIT
  639:	  01E7	75 30 00		MOV	FP_EXP,#0	;ZERO EXPONENT
  640:					;
  641:					;**************************************************************
  642:					;
  643:	  01EA			STORE_ALIGN_TEST_AND_EXIT:	;Save the number align carry and exit
  644:					;
  645:					;**************************************************************
  646:					;
  647:	  01EA	51 E5			ACALL	LOAD_POINTERS
  648:	  01EC	89 24			MOV	ARG_STACK,R1	;SET UP THE NEW STACK
  649:	  01EE	78 30			MOV	R0,#FP_EXP
  650:					;
  651:					; Now load the numbers
  652:					;
  653:	  01F0	E6		STORE2:	MOV	A,@R0
  654:	  01F1	F3			MOVX	@R1,A		;SAVE THE NUMBER
  655:	  01F2	18			DEC	R0
  656:	  01F3	19			DEC	R1
  657:	  01F4	B8 2A F9		CJNE	R0,#FP_CARRY,STORE2
  658:					;
  659:	  01F7	E4			CLR	A		;NO ERRORS
  660:					;
  661:	  01F8	22		PRET:	RET			;EXIT
  662:					;
  663:				$EJECT

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 19



 Line  I  Addr  Code            Source

  664:	  01F9			INC_FP_EXP:
  665:					;
  666:	  01F9	05 30			INC	FP_EXP
  667:	  01FB	E5 30			MOV	A,FP_EXP
  668:	  01FD	70 F9			JNZ	PRET		;EXIT IF NOT ZERO
  669:	  01FF	D0 E0			POP	ACC		;WASTE THE CALLING STACK
  670:	  0201	D0 E0			POP	ACC
  671:	  0203	41 1B			AJMP	OVERFLOW_AND_EXIT
  672:					;
  673:				;***********************************************************************
  674:				;
  675:	  0205			UNPACK_R0:	; Unpack BCD digits and load into nibble locations
  676:				;
  677:				;***********************************************************************
  678:					;
  679:	  0205	C0 01			PUSH	R1B0
  680:	  0207	79 32			MOV	R1,#FP_NIB8
  681:					;
  682:	  0209	E2		ULOOP:	MOVX	A,@R0
  683:	  020A	54 0F			ANL	A,#0FH
  684:	  020C	F7			MOV	@R1,A		;SAVE THE NIBBLE
  685:	  020D	E2			MOVX	A,@R0
  686:	  020E	C4			SWAP	A
  687:	  020F	54 0F			ANL	A,#0FH
  688:	  0211	19			DEC	R1
  689:	  0212	F7			MOV	@R1,A		;SAVE THE NIBBLE AGAIN
  690:	  0213	18			DEC	R0
  691:	  0214	19			DEC	R1
  692:	  0215	B9 2A F1		CJNE	R1,#FP_NIB1-1,ULOOP
  693:					;
  694:	  0218	D0 01			POP	R1B0
  695:					;
  696:	  021A	22		LOAD7:	RET
  697:					;
  698:				$EJECT

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 20



 Line  I  Addr  Code            Source

  699:					;**************************************************************
  700:					;
  701:	  021B			OVERFLOW_AND_EXIT:	;LOAD 99999999 E+127,  SET OV BIT, AND EXIT
  702:					;
  703:					;**************************************************************
  704:					;
  705:	  021B	78 2E			MOV	R0,#FP_DIG78
  706:	  021D	74 99			MOV	A,#99H
  707:					;
  708:	  021F	F6		OVE1:	MOV	@R0,A
  709:	  0220	18			DEC	R0
  710:	  0221	B8 2A FB		CJNE	R0,#FP_CARRY,OVE1
  711:					;
  712:	  0224	75 30 FF		MOV	FP_EXP,#0FFH
  713:	  0227	31 EA			ACALL	STORE_ALIGN_TEST_AND_EXIT
  714:					;
  715:	  0229	D2 E1			SETB	ACC.OVERFLOW
  716:	  022B	22			RET
  717:					;
  718:				$EJECT

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 21



 Line  I  Addr  Code            Source

  719:					;**************************************************************
  720:					;
  721:	  022C			UNDERFLOW_AND_EXIT:	;LOAD 0, SET UF BIT, AND EXIT
  722:					;
  723:					;**************************************************************
  724:					;
  725:	  022C	51 32			ACALL	ZERO_AND_EXIT
  726:	  022E	E4			CLR	A
  727:	  022F	D2 E0			SETB	ACC.UNDERFLOW
  728:	  0231	22			RET
  729:					;
  730:					;**************************************************************
  731:					;
  732:	  0232			ZERO_AND_EXIT:		;LOAD 0, SET ZERO BIT, AND EXIT
  733:					;
  734:					;**************************************************************
  735:					;
  736:	  0232	51 39			ACALL	FP_CLEAR
  737:	  0234	31 EA			ACALL	STORE_ALIGN_TEST_AND_EXIT
  738:	  0236	D2 E2			SETB	ACC.ZERO
  739:	  0238	22			RET			;EXIT
  740:					;
  741:					;**************************************************************
  742:					;
  743:	  0239			FP_CLEAR:
  744:					;
  745:					; Clear internal storage
  746:					;
  747:					;**************************************************************
  748:					;
  749:	  0239	E4			CLR	A
  750:	  023A	78 3D			MOV	R0,#FP_ACC8+1
  751:					;
  752:	  023C	F6		FPC1:	MOV	@R0,A
  753:	  023D	18			DEC	R0
  754:	  023E	B8 29 FB		CJNE	R0,#FP_TEMP,FPC1
  755:	  0241	22			RET
  756:					;
  757:				$EJECT

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 22



 Line  I  Addr  Code            Source

  758:					;**************************************************************
  759:					;
  760:	  0242			RIGHT:	; Shift ACCUMULATOR RIGHT the number of nibbles in R7
  761:					; Save the shifted values in R4 if SAVE_ROUND is set
  762:					;
  763:					;**************************************************************
  764:					;
  765:	  0242	7C 00			MOV	R4,#0		;IN CASE OF NO SHIFT
  766:					;
  767:	  0244	C3		RIGHT1:	CLR	C
  768:	  0245	EF			MOV	A,R7		;GET THE DIGITS TO SHIFT
  769:	  0246	60 22			JZ	RIGHT5-1	;EXIT IF ZERO
  770:	  0248	94 02			SUBB	A,#2		;TWO TO DO?
  771:	  024A	50 1F			JNC	RIGHT5		;SHIFT TWO NIBBLES
  772:					;
  773:					; Swap one nibble then exit
  774:					;
  775:	  024C	C0 00		RIGHT3:	PUSH	R0B0		;SAVE POINTER REGISTER
  776:	  024E	C0 01			PUSH	R1B0
  777:					;
  778:	  0250	79 2E			MOV	R1,#FP_DIG78	;LOAD THE POINTERS
  779:	  0252	78 2D			MOV	R0,#FP_DIG56
  780:	  0254	EC			MOV	A,R4		;GET THE OVERFLOW REGISTER
  781:	  0255	D7			XCHD	A,@R1		;GET DIGIT 8
  782:	  0256	C4			SWAP	A		;FLIP FOR LOAD
  783:	  0257	FC			MOV	R4,A
  784:					;
  785:	  0258	E7		RIGHTL:	MOV	A,@R1		;GET THE LOW ORDER BYTE
  786:	  0259	D6			XCHD	A,@R0		;SWAP NIBBLES
  787:	  025A	C4			SWAP	A		;FLIP FOR STORE
  788:	  025B	F7			MOV	@R1,A		;SAVE THE DIGITS
  789:	  025C	18			DEC	R0		;BUMP THE POINTERS
  790:	  025D	19			DEC	R1
  791:	  025E	B9 2A F7		CJNE	R1,#FP_DIG12-1,RIGHTL	;LOOP
  792:					;
  793:	  0261	E7			MOV	A,@R1		;ACC = CH8
  794:	  0262	C4			SWAP	A		;ACC = 8CH
  795:	  0263	54 0F			ANL	A,#0FH		;ACC = 0CH
  796:	  0265	F7			MOV	@R1,A		;CARRY DONE
  797:	  0266	D0 01			POP	R1B0		;EXIT
  798:	  0268	D0 00			POP	R0B0		;RESTORE REGISTER
  799:	  026A	22			RET
  800:					;
  801:	  026B	FF		RIGHT5:	MOV	R7,A		;SAVE THE NEW SHIFT NUMBER
  802:	  026C	E4			CLR	A
  803:	  026D	C5 2A			XCH	A,FP_CARRY	;SWAP THE NIBBLES
  804:	  026F	C5 2B			XCH	A,FP_DIG12
  805:	  0271	C5 2C			XCH	A,FP_DIG34
  806:	  0273	C5 2D			XCH	A,FP_DIG56
  807:	  0275	C5 2E			XCH	A,FP_DIG78
  808:	  0277	FC			MOV	R4,A		;SAVE THE LAST DIGIT SHIFTED
  809:	  0278	80 CB			SJMP	RIGHT1+1
  810:					;
  811:				$EJECT

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 23



 Line  I  Addr  Code            Source

  812:					;***************************************************************
  813:					;
  814:	  027A			LEFT:	; Shift ACCUMULATOR LEFT the number of nibbles in R7
  815:					;
  816:					;***************************************************************
  817:					;
  818:	  027A	7C 00			MOV	R4,#00H		;CLEAR FOR SOME ENTRYS
  819:					;
  820:	  027C	C3		LEFT1:	CLR	C
  821:	  027D	EF			MOV	A,R7		;GET SHIFT VALUE
  822:	  027E	60 22			JZ	LEFT5-1		;EXIT IF ZERO
  823:	  0280	94 02			SUBB	A,#2		;SEE HOW MANY BYTES TO SHIFT
  824:	  0282	50 1F			JNC	LEFT5
  825:					;
  826:	  0284	C0 00		LEFT3:	PUSH	R0B0		;SAVE POINTER
  827:	  0286	C0 01			PUSH	R1B0
  828:	  0288	78 2A			MOV	R0,#FP_CARRY
  829:	  028A	79 2B			MOV	R1,#FP_DIG12
  830:					;
  831:	  028C	E6			MOV	A,@R0		;ACC=CHCL
  832:	  028D	C4			SWAP	A		;ACC = CLCH
  833:	  028E	F6			MOV	@R0,A		;ACC = CLCH, @R0 = CLCH
  834:					;
  835:	  028F	E7		LEFTL:	MOV	A,@R1		;DIG 12
  836:	  0290	C4			SWAP	A		;DIG 21
  837:	  0291	D6			XCHD	A,@R0
  838:	  0292	F7			MOV	@R1,A		;SAVE IT
  839:	  0293	08			INC	R0		;BUMP POINTERS
  840:	  0294	09			INC	R1
  841:	  0295	B8 2E F7		CJNE	R0,#FP_DIG78,LEFTL
  842:					;
  843:	  0298	EC			MOV	A,R4
  844:	  0299	C4			SWAP	A
  845:	  029A	D6			XCHD	A,@R0
  846:	  029B	54 F0			ANL	A,#0F0H
  847:	  029D	FC			MOV	R4,A
  848:					;
  849:	  029E	D0 01			POP	R1B0
  850:	  02A0	D0 00			POP	R0B0		;RESTORE
  851:	  02A2	22			RET			;DONE
  852:					;
  853:	  02A3	FF		LEFT5:	MOV	R7,A		;RESTORE COUNT
  854:	  02A4	E4			CLR	A
  855:	  02A5	CC			XCH	A,R4		;GET THE RESTORATION BYTE
  856:	  02A6	C5 2E			XCH	A,FP_DIG78	;DO THE SWAP
  857:	  02A8	C5 2D			XCH	A,FP_DIG56
  858:	  02AA	C5 2C			XCH	A,FP_DIG34
  859:	  02AC	C5 2B			XCH	A,FP_DIG12
  860:	  02AE	C5 2A			XCH	A,FP_CARRY
  861:	  02B0	80 CB			SJMP	LEFT1+1
  862:					;
  863:				$EJECT

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 24



 Line  I  Addr  Code            Source

  864:	  02B2			MUL_NIBBLE:
  865:					;
  866:					; Multiply the nibble in R7 by the FP_NIB locations
  867:					; accumulate the product in FP_ACC
  868:					;
  869:					; Set up the pointers for multiplication
  870:					;
  871:	  02B2	54 0F			ANL	A,#0FH		;STRIP OFF MS NIBBLE
  872:	  02B4	FF			MOV	R7,A
  873:	  02B5	78 3C			MOV	R0,#FP_ACC8
  874:	  02B7	79 32			MOV	R1,#FP_NIB8
  875:	  02B9	E4			CLR	A
  876:	  02BA	F5 33			MOV	FP_ACCX,A
  877:					;
  878:	  02BC	18		MNLOOP:	DEC	R0		;BUMP POINTER TO PROPAGATE CARRY
  879:	  02BD	26			ADD	A,@R0		;ATTEMPT TO FORCE CARRY
  880:	  02BE	D4			DA	A		;BCD ADJUST
  881:	  02BF	30 E4 03		JNB	ACC.4,MNL0	;DON'T ADJUST IF NO NEED
  882:	  02C2	18			DEC	R0		;PROPAGATE CARRY TO THE NEXT DIGIT
  883:	  02C3	06			INC	@R0		;DO THE ADJUSTING
  884:	  02C4	08			INC	R0		;RESTORE R0
  885:					;
  886:	  02C5	D6		MNL0:	XCHD	A,@R0		;RESTORE INITIAL NUMBER
  887:	  02C6	8F F0			MOV	B,R7		;GET THE NUBBLE TO MULTIPLY
  888:	  02C8	E7			MOV	A,@R1		;GET THE OTHER NIBBLE
  889:	  02C9	A4			MUL	AB		;DO THE MULTIPLY
  890:	  02CA	75 F0 0A		MOV	B,#10		;NOW BCD ADJUST
  891:	  02CD	84			DIV	AB
  892:	  02CE	C5 F0			XCH	A,B		;GET THE REMAINDER
  893:	  02D0	26			ADD	A,@R0		;PROPAGATE THE PARTIAL PRODUCTS
  894:	  02D1	D4			DA	A		;BCD ADJUST
  895:	  02D2	30 E4 02		JNB	ACC.4,MNL1	;PROPAGATE PARTIAL PRODUCT CARRY
  896:	  02D5	05 F0			INC	B
  897:					;
  898:	  02D7	08		MNL1:	INC	R0
  899:	  02D8	D6			XCHD	A,@R0		;SAVE THE NEW PRODUCT
  900:	  02D9	18			DEC	R0
  901:	  02DA	E5 F0			MOV	A,B		;GET BACK THE QUOTIENT
  902:	  02DC	19			DEC	R1

⌨️ 快捷键说明

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