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

📄 base.asm

📁 这是用台湾KingB 8位单片机开发的科学计算器程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
           call   .Buf_trans_X
           lda0   SignX
           xora   #01
           sta0   SignX
           call   .X_trans_Z                
2$:           
           ret
           
;InputOperandX (decimal)
;Output:OperandZ (decimal)          
LogicNot::
           call  Base_Dec2Hex
           lda0  ErrorFlag
           cmpe  #1
           brc   1$
           lda   #0
           sta0  OpCntNo
           lda   #OperandZ+6
           sta   DP
0$:           
           lda   I
           xora  #0xff
           sta   I
           decdp
           lda0  OpCntNo
           inca
           sta0  OpCntNo
           cmpe  #4
           brnz  0$  
1$:           
           call  .Z_trans_X
           call  Base_Hex2Dec
           ret                      
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 
;         Private functions
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                 
;Input:OperandX
;Output:OperandZ                 
Dec2Bin:
           lda   #02h
           sta0  Param+0
           lda   #11
           sta0  Param+1           
           call  Dec2HBOBase
           ret
           
Dec2Hex:
           lda   #16h
           sta0  Param+0
           lda   #9
           sta0  Param+1           
           call  Dec2HBOBase
           ret
           
Dec2Oct:
           lda   #08h
           sta0  Param+0
           lda   #11
           sta0  Param+1           
           call  Dec2HBOBase
           ret           
           
FillInLowByte:
           lda   #Buffer
	   adda  BufLen
	   sta   DP
	   lda   #>.M_bcdbuf
	   sta   PP
	   lda0  OperandX+6
	   sta   .M_bcdbuf
	   call  .bcdtohex
	   lda   .M_bcdbuf
	   sta0  Temp1
	   lda   #0
	   sta   PP
	   lda   Temp1
	   sta   I
           ret           
FillInHighByte:
           lda   #Buffer
	   adda  BufLen
	   sta   DP
	   lda   #>.M_bcdbuf
	   sta   PP
	   lda0  OperandX+6
	   sta   .M_bcdbuf
	   call  .bcdtohex
	   lda   .M_bcdbuf
	   rolc
	   rolc
	   rolc
	   rolc
	   anda  #0xf0
	   sta0  Temp1
	   lda   #0
	   sta   PP
           lda0  Temp1	   
	   ora   I
	   sta   I        
           ret 
           
;Input:OperandX
;Output:OperandX

;Input:BufferZ:Base digits
;Input:(BufferZ+1,BufferZ+2)=(base table address High byte,base table address low byte)                      
HBO2DecBase:
           lda	 #OperandX
 	   sta0	 Addr1
 	   lda	 #Buffer
 	   sta0	 Addr2
 	   call	 CopyData    ; clear buffer to zero
 	   lda0	 PointX
 	   sta0	 PointB
 	   lda0  SignX
 	   sta0	 SignB
	   call  .ClrY
	   call  .Y_trans_Buf
           lda   #6
	   sta0  BufLen
	   lda   #0
	   sta   OpCntNo
0$:	   
           lda   #Buffer
	   adda  BufLen
	   sta   DP
           lda0  OpCntNo
	   rorc
	   brc   1$
	   lda   I
	   anda  #0x0f
	   sta0  Temp1
	   br    2$
1$:
           lda   I
	   anda  #0xf0
	   rorc
	   rorc
	   rorc
	   rorc
	   anda  #0x0f
	   sta0  Temp1
	   lda0  BufLen
	   deca
           sta0  BufLen   
2$:	   
	   lda0  OpCntNo
	   sta0  .M_Data_Offset
	   inca
	   sta0  OpCntNo 
	   
	   lda   #>.M_hexbuf
	   sta   PP
	   lda   #0
	   sta   .M_hexbuf
	   lda0  Temp1
	   sta   .M_hexbuf+1
	   call  .Hex2Bcd
	   lda   .M_bcdbuf+1
           sta0   Temp1       ;BCD value 	   
	   lda    #0
	   sta    PP
	   lda    BufferZ+1
	   sta    Addr1
	   lda    BufferZ+2
	   sta    Addr2
	   call   InpDataToOpY
	   call   .ClrX
	   lda0   Temp1
	   sta0   OperandX+6
	   call   Multiplation
	   call   .Buf_trans_X
	   call   .Z_trans_Y
	   call   Addition
	   call   .Z_trans_Buf
	   lda0   OpCntNo
	   cmpe   BufferZ
	   brnz   0$
           call   .Buf_trans_Z	     
           lda0   SignB
           xora   SignZ
           sta0   SignZ
           ret           
           
;Input:OperandX,Param+0(base=2,8,16),Param+1(Digits of output)
;Output:OperandZ                            
Dec2HBOBase:
           call	 .ClrY
           lda	 #OperandY
 	   sta0	 Addr1
 	   lda	 #Buffer
 	   sta0	 Addr2
 	   call	 CopyData    ; clear buffer to zero
 	   lda	 #0
 	   sta0	 PointB
 	   lda0  SignX
 	   sta0	 SignB
	   lda0	 Param+0
	   sta0	 OperandY+6
	   lda   #6
	   sta0  BufLen
	   lda   #0
	   sta   OpCntNo
ModLoop:	   
	   call  Mod
	   call  MoveData
	   lda0  OpCntNo
	   rorc
	   brc   1$
	   call  FillInLowByte
	   br    2$
1$:	   
           call  FillInHighByte 
           lda   BufLen
           deca
           sta   BufLen   
;;           
2$:
           lda0  OpCntNo
           inca
           sta0  OpCntNo  
	   call	 .ClrY
	   lda0	 Param+0          ;base=2,8,16
	   sta0	 OperandY+6
	   call  .Z_trans_X
	   call	 LineUp	
           lda	 #OperandX
	   sta	 Addr1
	   lda	 #OperandY
	   sta	 Addr2		
	   lda	 #07h
	   sta	 DpCount
	   call	 CompareData
	   lda   Temp1
	   cmpe  #2
           brz   0$
           call	 .ClrY
	   lda0	 Param+0          ;base=2,8,16
	   sta0	 OperandY+6
	   call  .Z_trans_X
           br    ModLoop
0$:           
           call  .Z_trans_X
           call  MoveData
	   lda0  OpCntNo
	   rorc
	   brc   3$
	   call  FillInLowByte
	   br    4$
3$:
           call  FillInHighByte
4$:	   
           lda0  OpCntNo
           inca
           sta0  OpCntNo  
	   
;           lda0  OpCntNo
           cmpe  Param+1                  ;base=2,8(10+1),16(8+1)
           brnc  5$
           lda   #1
           sta0  ErrorFlag
           br    EndDec2HBO
5$:            
           lda	 #Buffer
 	   sta0	 Addr1
 	   lda	 #OperandZ
 	   sta0	 Addr2
 	   call	 CopyData
 	   lda0  SignB
 	   sta0  SignZ
 	   lda0  OpCntNo
 	   sta0  PointZ
EndDec2HBO: 	   
           ret
           
MoveData::    
           lda     #OperandX
           sta     Addr1
           call    CheckData
           lda     DpCount
           adda    #0
           brz     0$
2$:           
           lda0	  PointX
           cmpe   #0
           brz    0$
           cmpe   #88h
           brc    1$
	   deca
	   sta0	 PointX
           lda	 #OperandX
	   sta0	 Addr1
	   call	 ShiftToR
	   br    2$
1$:	
           lda0	  PointX
           cmpe   #0
           brz    0$
           lda   OperandX
           anda  #0f0h
           brnz   0$
           lda0  PointX
           inca
           sta0	 PointX
           lda	 #OperandX
	   sta0	 Addr1
	   call	 ShiftToL
	   br    1$
0$:	   
           ret
           
           
;Input:Table address (Addr1=High,Addr2=Low)
;Input:Data Offset                
InpDataToOpY::	
		;lda	OP1
		;anda	#~10h
		;sta	OP1	 
		call	.ClrY 
		lda	#0h
		sta	TPP
		lda	Addr1
		sta	TableC+1		
		lda	.M_Data_Offset
		adda	.M_Data_Offset
		sta     Addr3
		adda	Addr3
		adda	Addr3
		adda	Addr3
               	adda	Addr3	
		adda    Addr2
		sta	TableC 			
		lda	TableC+1	
		addc    #0
		sta	TableC+1	
		
		lda	#0h
		sta	TPP
		lda	TableC+1	
		sta	TPH
		lda	TableC 
		sta	TPL		
		ldv
		sta	SignY
		ldv
		sta	PointY
		lda	#OperandY
		sta	DP	 	
InpY0:					
		ldv		
		cmpe	#0ffh
		brz	End_InpY0
		sta	i		
		incdp		
		br	InpY0
		
End_InpY0:
		;lda	OP1 
		;ora	#10h
		;sta	OP1
		ret
		
;		
;InputOperandX,OperandY
;Input:MathOp (and:1,or:2,xor:3,xnor:4)
;Output:OperandZ           
LogicMathOp:
           call  .ClrZ
           call  .Y_trans_Buf
           call  Base_Dec2Hex
           lda0  ErrorFlag
           cmpe  #1
           brc   5$
           call  .Z_trans_S
           call  .Buf_trans_X
           call  Base_Dec2Hex
           lda0  ErrorFlag
           cmpe  #1
           brc   5$
           call  .Z_trans_Y
           call  .S_trans_X
           lda   #0
           sta0  OpCntNo
           lda   #6
           sta0  BufLen
           
0$:        
           lda0  BufLen
           adda  #OperandX
           sta   DP  
           lda   I
           sta0  Temp1
           
           lda0  BufLen
           adda  #OperandY
           sta   DP  
           lda   I
           sta0  Temp2
           lda0  MathOp
           cmpe  #1                  ;and operation
           brnz  1$
           lda0  Temp2
           anda  Temp1
           sta0  Temp3
           br    4$
1$:
           lda0  MathOp
           cmpe  #2                  ;or operation
           brnz  2$
           lda0  Temp2
           ora   Temp1
           sta0  Temp3
           br    4$
2$:        
           lda0  MathOp
           cmpe  #3                  ;xor operation
           brnz  3$
           lda0  Temp2
           xora  Temp1
           sta0  Temp3
           br    4$
3$:        
           lda0  MathOp
           cmpe  #4                  ;xnor operation
           brnz  5$
           lda0  Temp2
           xora  Temp1
           xora  #0xff
           sta0  Temp3
4$:           
           lda0  BufLen
           adda  #OperandZ
           sta   DP  
           lda0  Temp3
           sta   I   
           lda0  BufLen
           deca
           sta0  BufLen
           lda0  OpCntNo
           inca
           sta0  OpCntNo
           cmpe  #4
           brnz  0$  
           
5$:        
           call  .Z_trans_X   
           call  Base_Hex2Dec
           ret		
           
                      
;Base-2 (10 digits)  
Bin2DecTab:
           DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0ffh
           DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0ffh
           DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0ffh
           DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0ffh
           DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0ffh
           DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0ffh
           DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0ffh
           DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x28,0ffh              
           DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x56,0ffh
           DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x12,0ffh
                                      
;Base-8 (10 digits)                   
Oct2DecTab:                           
           DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0ffh
           DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0ffh
           DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0ffh
           DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x12,0ffh
           DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x96,0ffh
           DB 0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x27,0x68,0ffh
           DB 0x00,0x00,0x00,0x00,0x00,0x00,0x26,0x21,0x44,0ffh
           DB 0x00,0x00,0x00,0x00,0x00,0x02,0x09,0x71,0x52,0ffh              
           DB 0x00,0x00,0x00,0x00,0x00,0x16,0x77,0x72,0x16,0ffh
           DB 0x00,0x00,0x00,0x00,0x01,0x34,0x21,0x77,0x28,0ffh
                                      
;Base-16 (8 digits)                   
Hex2DecTab:                           
           DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0ffh
           DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0ffh
           DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x56,0ffh
           DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x96,0ffh
           DB 0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x55,0x36,0ffh              
           DB 0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x85,0x76,0ffh
           DB 0x00,0x00,0x00,0x00,0x00,0x16,0x77,0x72,0x16,0ffh
           DB 0x00,0x00,0x00,0x00,0x02,0x68,0x43,0x54,0x56,0ffh    
              
              
                      

⌨️ 快捷键说明

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