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

📄 fp-52.lst

📁 一个用PROTEUS搭建的51单片机的基本运行系统
💻 LST
📖 第 1 页 / 共 5 页
字号:
  586:	  1B3A	74 08		PACK1:	MOV	A,#8		;ADJUST NIBBLE POINTER
  587:	  1B3C	F9			MOV	R1,A
  588:	  1B3D	28			ADD	A,R0
  589:	  1B3E	F8			MOV	R0,A
  590:	  1B3F	B6 05 00		CJNE	@R0,#5,$+3	;SEE IF ADJUSTING NEEDED
  591:	  1B42	40 13			JC	PACK3+1
  592:					;
  593:	  1B44	D3		PACK2:	SETB	C
  594:	  1B45	E4			CLR	A
  595:	  1B46	18			DEC	R0
  596:	  1B47	36			ADDC	A,@R0
  597:	  1B48	D4			DA	A
  598:	  1B49	D6			XCHD	A,@R0		;SAVE THE VALUE
  599:	  1B4A	30 E4 09		JNB	ACC.4,PACK3
  600:	  1B4D	D9 F5			DJNZ	R1,PACK2
  601:					;
  602:	  1B4F	18			DEC	R0
  603:	  1B50	76 01			MOV	@R0,#1
  604:	  1B52	71 7F			ACALL	INC_FP_EXP
  605:	  1B54	80 06			SJMP	PACK4
  606:					;
  607:	  1B56	19		PACK3:	DEC	R1
  608:	  1B57	E9			MOV	A,R1
  609:	  1B58	C3			CLR	C
  610:	  1B59	C8			XCH	A,R0
  611:	  1B5A	98			SUBB	A,R0
  612:	  1B5B	F8			MOV	R0,A
  613:					;
  614:	  1B5C	79 2B		PACK4:	MOV	R1,#FP_DIG12
  615:					;
  616:					; Now, pack
  617:					;
  618:	  1B5E	E6		PLOOP:	MOV	A,@R0
  619:	  1B5F	C4			SWAP	A		;FLIP THE DIGITS
  620:	  1B60	08			INC	R0
  621:	  1B61	D6			XCHD	A,@R0
  622:	  1B62	42 06			ORL	6,A		;ACCUMULATE THE OR'ED DIGITS
  623:	  1B64	F7			MOV	@R1,A
  624:	  1B65	08			INC	R0

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 19



 Line  I  Addr  Code            Source

  625:	  1B66	09			INC	R1
  626:	  1B67	B9 2F F4		CJNE	R1,#FP_SIGN,PLOOP
  627:	  1B6A	EE			MOV	A,R6
  628:	  1B6B	70 03			JNZ	STORE_ALIGN_TEST_AND_EXIT
  629:	  1B6D	75 30 00		MOV	FP_EXP,#0	;ZERO EXPONENT
  630:					;
  631:					;**************************************************************
  632:					;
  633:	  1B70			STORE_ALIGN_TEST_AND_EXIT:	;Save the number align carry and exit
  634:					;
  635:					;**************************************************************
  636:					;
  637:	  1B70	91 6B			ACALL	LOAD_POINTERS
  638:	  1B72	89 09			MOV	ARG_STACK,R1	;SET UP THE NEW STACK
  639:	  1B74	78 30			MOV	R0,#FP_EXP
  640:					;
  641:					; Now load the numbers
  642:					;
  643:	  1B76	E6		STORE2:	MOV	A,@R0
  644:	  1B77	F3			MOVX	@R1,A		;SAVE THE NUMBER
  645:	  1B78	18			DEC	R0
  646:	  1B79	19			DEC	R1
  647:	  1B7A	B8 2A F9		CJNE	R0,#FP_CARRY,STORE2
  648:					;
  649:	  1B7D	E4			CLR	A		;NO ERRORS
  650:					;
  651:	  1B7E	22		PRET:	RET			;EXIT
  652:					;
  653:				$EJECT

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 20



 Line  I  Addr  Code            Source

  654:	  1B7F			INC_FP_EXP:
  655:					;
  656:	  1B7F	05 30			INC	FP_EXP
  657:	  1B81	E5 30			MOV	A,FP_EXP
  658:	  1B83	70 F9			JNZ	PRET		;EXIT IF NOT ZERO
  659:	  1B85	D0 E0			POP	ACC		;WASTE THE CALLING STACK
  660:	  1B87	D0 E0			POP	ACC
  661:	  1B89	61 A1			AJMP	OVERFLOW_AND_EXIT
  662:					;
  663:				;***********************************************************************
  664:				;
  665:	  1B8B			UNPACK_R0:	; Unpack BCD digits and load into nibble locations
  666:				;
  667:				;***********************************************************************
  668:					;
  669:	  1B8B	C0 01			PUSH	R1B0
  670:	  1B8D	79 32			MOV	R1,#FP_NIB8
  671:					;
  672:	  1B8F	E2		ULOOP:	MOVX	A,@R0
  673:	  1B90	54 0F			ANL	A,#0FH
  674:	  1B92	F7			MOV	@R1,A		;SAVE THE NIBBLE
  675:	  1B93	E2			MOVX	A,@R0
  676:	  1B94	C4			SWAP	A
  677:	  1B95	54 0F			ANL	A,#0FH
  678:	  1B97	19			DEC	R1
  679:	  1B98	F7			MOV	@R1,A		;SAVE THE NIBBLE AGAIN
  680:	  1B99	18			DEC	R0
  681:	  1B9A	19			DEC	R1
  682:	  1B9B	B9 2A F1		CJNE	R1,#FP_NIB1-1,ULOOP
  683:					;
  684:	  1B9E	D0 01			POP	R1B0
  685:					;
  686:	  1BA0	22		LOAD7:	RET
  687:					;
  688:				$EJECT

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 21



 Line  I  Addr  Code            Source

  689:					;**************************************************************
  690:					;
  691:	  1BA1			OVERFLOW_AND_EXIT:	;LOAD 99999999 E+127,  SET OV BIT, AND EXIT
  692:					;
  693:					;**************************************************************
  694:					;
  695:	  1BA1	78 2E			MOV	R0,#FP_DIG78
  696:	  1BA3	74 99			MOV	A,#99H
  697:					;
  698:	  1BA5	F6		OVE1:	MOV	@R0,A
  699:	  1BA6	18			DEC	R0
  700:	  1BA7	B8 2A FB		CJNE	R0,#FP_CARRY,OVE1
  701:					;
  702:	  1BAA	75 30 FF		MOV	FP_EXP,#0FFH
  703:	  1BAD	71 70			ACALL	STORE_ALIGN_TEST_AND_EXIT
  704:					;
  705:	  1BAF	D2 E1			SETB	ACC.OVERFLOW
  706:	  1BB1	22			RET
  707:					;
  708:				$EJECT

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 22



 Line  I  Addr  Code            Source

  709:					;**************************************************************
  710:					;
  711:	  1BB2			UNDERFLOW_AND_EXIT:	;LOAD 0, SET UF BIT, AND EXIT
  712:					;
  713:					;**************************************************************
  714:					;
  715:	  1BB2	71 B8			ACALL	ZERO_AND_EXIT
  716:	  1BB4	E4			CLR	A
  717:	  1BB5	D2 E0			SETB	ACC.UNDERFLOW
  718:	  1BB7	22			RET
  719:					;
  720:					;**************************************************************
  721:					;
  722:	  1BB8			ZERO_AND_EXIT:		;LOAD 0, SET ZERO BIT, AND EXIT
  723:					;
  724:					;**************************************************************
  725:					;
  726:	  1BB8	71 BF			ACALL	FP_CLEAR
  727:	  1BBA	71 70			ACALL	STORE_ALIGN_TEST_AND_EXIT
  728:	  1BBC	D2 E2			SETB	ACC.ZERO
  729:	  1BBE	22			RET			;EXIT
  730:					;
  731:					;**************************************************************
  732:					;
  733:	  1BBF			FP_CLEAR:
  734:					;
  735:					; Clear internal storage
  736:					;
  737:					;**************************************************************
  738:					;
  739:	  1BBF	E4			CLR	A
  740:	  1BC0	78 3D			MOV	R0,#FP_ACC8+1
  741:					;
  742:	  1BC2	F6		FPC1:	MOV	@R0,A
  743:	  1BC3	18			DEC	R0
  744:	  1BC4	B8 29 FB		CJNE	R0,#FP_TEMP,FPC1
  745:	  1BC7	22			RET
  746:					;
  747:				$EJECT

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 23



 Line  I  Addr  Code            Source

  748:					;**************************************************************
  749:					;
  750:	  1BC8			RIGHT:	; Shift ACCUMULATOR RIGHT the number of nibbles in R7
  751:					; Save the shifted values in R4 if SAVE_ROUND is set
  752:					;
  753:					;**************************************************************
  754:					;
  755:	  1BC8	7C 00			MOV	R4,#0		;IN CASE OF NO SHIFT
  756:					;
  757:	  1BCA	C3		RIGHT1:	CLR	C
  758:	  1BCB	EF			MOV	A,R7		;GET THE DIGITS TO SHIFT
  759:	  1BCC	60 22			JZ	RIGHT5-1	;EXIT IF ZERO
  760:	  1BCE	94 02			SUBB	A,#2		;TWO TO DO?
  761:	  1BD0	50 1F			JNC	RIGHT5		;SHIFT TWO NIBBLES
  762:					;
  763:					; Swap one nibble then exit
  764:					;
  765:	  1BD2	C0 00		RIGHT3:	PUSH	R0B0		;SAVE POINTER REGISTER
  766:	  1BD4	C0 01			PUSH	R1B0
  767:					;
  768:	  1BD6	79 2E			MOV	R1,#FP_DIG78	;LOAD THE POINTERS
  769:	  1BD8	78 2D			MOV	R0,#FP_DIG56
  770:	  1BDA	EC			MOV	A,R4		;GET THE OVERFLOW REGISTER
  771:	  1BDB	D7			XCHD	A,@R1		;GET DIGIT 8
  772:	  1BDC	C4			SWAP	A		;FLIP FOR LOAD
  773:	  1BDD	FC			MOV	R4,A
  774:					;
  775:	  1BDE	E7		RIGHTL:	MOV	A,@R1		;GET THE LOW ORDER BYTE
  776:	  1BDF	D6			XCHD	A,@R0		;SWAP NIBBLES
  777:	  1BE0	C4			SWAP	A		;FLIP FOR STORE
  778:	  1BE1	F7			MOV	@R1,A		;SAVE THE DIGITS
  779:	  1BE2	18			DEC	R0		;BUMP THE POINTERS
  780:	  1BE3	19			DEC	R1
  781:	  1BE4	B9 2A F7		CJNE	R1,#FP_DIG12-1,RIGHTL	;LOOP
  782:					;
  783:	  1BE7	E7			MOV	A,@R1		;ACC = CH8
  784:	  1BE8	C4			SWAP	A		;ACC = 8CH
  785:	  1BE9	54 0F			ANL	A,#0FH		;ACC = 0CH
  786:	  1BEB	F7			MOV	@R1,A		;CARRY DONE
  787:	  1BEC	D0 01			POP	R1B0		;EXIT
  788:	  1BEE	D0 00			POP	R0B0		;RESTORE REGISTER
  789:	  1BF0	22			RET
  790:					;
  791:	  1BF1	FF		RIGHT5:	MOV	R7,A		;SAVE THE NEW SHIFT NUMBER
  792:	  1BF2	E4			CLR	A
  793:	  1BF3	C5 2A			XCH	A,FP_CARRY	;SWAP THE NIBBLES
  794:	  1BF5	C5 2B			XCH	A,FP_DIG12
  795:	  1BF7	C5 2C			XCH	A,FP_DIG34
  796:	  1BF9	C5 2D			XCH	A,FP_DIG56
  797:	  1BFB	C5 2E			XCH	A,FP_DIG78
  798:	  1BFD	FC			MOV	R4,A		;SAVE THE LAST DIGIT SHIFTED
  799:	  1BFE	80 CB			SJMP	RIGHT1+1
  800:					;
  801:				$EJECT

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 24



 Line  I  Addr  Code            Source

  802:					;***************************************************************
  803:					;
  804:	  1C00			LEFT:	; Shift ACCUMULATOR LEFT the number of nibbles in R7
  805:					;
  806:					;***************************************************************
  807:					;
  808:	  1C00	7C 00			MOV	R4,#00H		;CLEAR FOR SOME ENTRYS
  809:					;
  810:	  1C02	C3		LEFT1:	CLR	C
  811:	  1C03	EF			MOV	A,R7		;GET SHIFT VALUE
  812:	  1C04	60 22			JZ	LEFT5-1		;EXIT IF ZERO
  813:	  1C06	94 02			SUBB	A,#2		;SEE HOW MANY BYTES TO SHIFT
  814:	  1C08	50 1F			JNC	LEFT5
  815:					;
  816:	  1C0A	C0 00		LEFT3:	PUSH	R0B0		;SAVE POINTER
  817:	  1C0C	C0 01			PUSH	R1B0
  818:	  1C0E	78 2A			MOV	R0,#FP_CARRY
  819:	  1C10	79 2B			MOV	R1,#FP_DIG12
  820:					;
  821:	  1C12	E6			MOV	A,@R0		;ACC=CHCL
  822:	  1C13	C4			SWAP	A		;ACC = CLCH
  823:	  1C14	F6			MOV	@R0,A		;ACC = CLCH, @R0 = CLCH
  824:					;
  825:	  1C15	E7		LEFTL:	MOV	A,@R1		;DIG 12
  826:	  1C16	C4			SWAP	A		;DIG 21
  827:	  1C17	D6			XCHD	A,@R0
  828:	  1C18	F7			MOV	@R1,A		;SAVE IT
  829:	  1C19	08			INC	R0		;BUMP POINTERS
  830:	  1C1A	09			INC	R1
  831:	  1C1B	B8 2E F7		CJNE	R0,#FP_DIG78,LEFTL
  832:					;
  833:	  1C1E	EC			MOV	A,R4
  834:	  1C1F	C4			SWAP	A
  835:	  1C20	D6			XCHD	A,@R0
  836:	  1C21	54 F0			ANL	A,#0F0H
  837:	  1C23	FC			MOV	R4,A
  838:					;
  839:	  1C24	D0 01			POP	R1B0
  840:	  1C26	D0 00			POP	R0B0		;RESTORE
  841:	  1C28	22			RET			;DONE
  842:					;
  843:	  1C29	FF		LEFT5:	MOV	R7,A		;RESTORE COUNT
  844:	  1C2A	E4			CLR	A
  845:	  1C2B	CC			XCH	A,R4		;GET THE RESTORATION BYTE
  846:	  1C2C	C5 2E			XCH	A,FP_DIG78	;DO THE SWAP
  847:	  1C2E	C5 2D			XCH	A,FP_DIG56
  848:	  1C30	C5 2C			XCH	A,FP_DIG34
  849:	  1C32	C5 2B			XCH	A,FP_DIG12
  850:	  1C34	C5 2A			XCH	A,FP_CARRY
  851:	  1C36	80 CB			SJMP	LEFT1+1
  852:					;
  853:				$EJECT

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 25



 Line  I  Addr  Code            Source

  854:	  1C38			MUL_NIBBLE:
  855:					;
  856:					; Multiply the nibble in R7 by the FP_NIB locations
  857:					; accumulate the product in FP_ACC
  858:					;
  859:					; Set up the pointers for multiplication
  860:					;
  861:	  1C38	54 0F			ANL	A,#0FH		;STRIP OFF MS NIBBLE
  862:	  1C3A	FF			MOV	R7,A
  863:	  1C3B	78 3C			MOV	R0,#FP_ACC8
  864:	  1C3D	79 32			MOV	R1,#FP_NIB8
  865:	  1C3F	E4			CLR	A
  866:	  1C40	F5 33			MOV	FP_ACCX,A
  867:					;
  868:	  1C42	18		MNLOOP:	DEC	R0		;BUMP POINTER TO PROPAGATE CARRY
  869:	  1C43	26			ADD	A,@R0		;ATTEMPT TO FORCE CARRY
  870:	  1C44	D4			DA	A		;BCD ADJUST
  871:	  1C45	30 E4 03		JNB	ACC.4,MNL0	;DON'T ADJUST IF NO NEED
  872:	  1C48	18			DEC	R0		;PROPAGATE CARRY TO THE NEXT DIGIT
  873:	  1C49	06			INC	@R0		;DO THE ADJUSTING
  874:	  1C4A	08			INC	R0		;RESTORE R0
  875:					;
  876:	  1C4B	D6		MNL0:	XCHD	A,@R0		;RESTORE INITIAL NUMBER
  877:	  1C4C	8F F0			MOV	B,R7		;GET THE NUBBLE TO MULTIPLY
  878:	  1C4E	E7			MOV	A,@R1		;GET THE OTHER NIBBLE
  879:	  1C4F	A4			MUL	AB		;DO THE MULTIPLY
  880:	  1C50	75 F0 0A		MOV	B,#10		;NOW BCD ADJUST
  881:	  1C53	84			DIV	AB
  882:	  1C54	C5 F0			XCH	A,B		;GET THE REMAINDER
  883:	  1C56	26			ADD	A,@R0		;PROPAGATE THE PARTIAL PRODUCTS
  884:	  1C57	D4			DA	A		;BCD ADJUST
  885:	  1C58	30 E4 02		JNB	ACC.4,MNL1	;PROPAGATE PARTIAL PRODUCT CARRY
  886:	  1C5B	05 F0			INC	B
  887:					;
  888:	  1C5D	08		MNL1:	INC	R0
  889:	  1C5E	D6			XCHD	A,@R0		;SAVE THE NEW PRODUCT
  890:	  1C5F	18			DEC	R0
  891:	  1C60	E5 F0			MOV	A,B		;GET BACK THE QUOTIENT
  892:	  1C62	19			DEC	R1
  893:	  1C63	B9 2A DC		CJNE	R1,#FP_NIB1-1,MNLOOP
  894:					;
  895:	  1C66	25 33			ADD	A,FP_ACCX	;GET THE OVERFLOW
  896:	  1C68	D4			DA	A		;ADJUST
  897:	  1C69	F6			MOV	@R0,A		;SAVE IT
  898:	  1C6A	22			RET			;EXIT

⌨️ 快捷键说明

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