📄 bintoasc.asm
字号:
;; +-------------------------------------------------------------------------+; | Purpose: Routine to convert a 16bit binary number in ASCII; | |; | INPUT : R2 (Lsb) and R3 (Msb) ( binary) |; | |; | OUPUT : 30h,31h,32h,33h,34h (internal RAM address) (ASCII) |; | msb--^ ^------lsb |; | |; | Destroy all registers |; | |; | PROGRAMMER: Bruno Marcio Diogo Venancio ( bruno.marcio@bol.com.br ) |; | BRAZIL 07/19/2002 |; | THIS CODE CAN BE FREELY DISTRIBUTED WITHOUT CHANGES |; +-------------------------------------------------------------------------+;; Use example: ; ;START:; MOV R2,#low(1234) ; MOV R3,#high(1234); LCALL BINTOASC; ; in 30h until 34h of internal RAM will be :'0','1',' 2',','3','4' ( ASCII);;; The Routine Algorithm;;; +-------+; | START |; +---+---+; | ; +-------+; | N | ( N= Number to be coverted); +-------+; |; +-------------+; | POUT <- 0 | ( POUT = Output address ) ; +-------------+; |; +--------+; | P <- 0 | ( P= Table Index ); +--------+; |; |; +-----------> | ; | +-------------+ ( R = Register ); | | R <- TAB(P) | ( Fetch a table number indexed by P ) ; | +-------------+; | |; | +----------+; | | C <- '0' | ( C= counter); | +----------+ ( counter <- 0 in ASCII); | |; | +------> |; | | +-----------+; | | | N <- N-R | ( subtract the table number with R ); | | +-----------+ ; | | |; | | N / \ Y; | | +--< N<0? >-----------+; | | | \ / |; | | | \/ |; | | | +--------------------+; | | +-------+ | TABOUT (POUT) <- C |; | | |C<- C+1| +--------------------+; | | +-------+ |; | | | +----------+; | +-----+ | N <- N+R |; | +----------+; | |; | +------------------+; | | POUT <- POUT +1 |; | +------------------+; | |; | /^\; | / \; | +----------+ N / \ S; +---| P <- P+1 |-----------< TAB(P)=1? > ---------+; +----------+ \ / |; \ / |; \ / |; +-----+; | END |; +-----+;; BINTOASC: MOV R0,#30h ; R0 = POUT MOV DPTR,#TAB ; R=TAB(P)COM1: CLR A ; P <- 0 MOVC A,@A+DPTR ; R <- TAB(P) MOV R7,A INC DPTR CLR A MOVC A,@A+DPTR MOV R6,A MOV R4,#'0' ; C <- '0'SOMA: ; N <- N-R CLR C ; MOV A,R2 ; SUBB A,R6 ; MOV R2,A ; MOV A,R3 ; SUBB A,R7 ; MOV R3,A ; JC SAIDA ; If < 0 goto SAIDA INC R4 ; If >0 then C <- C +1 SJMP SOMA ; goto SOMA SAIDA: MOV A,R4 MOV @R0,A ;TABOUT (POUT) <- C MOV A,R2 ADD A,R6 ; N=N+R MOV R2,A MOV A,R3 ADDC A,R7 MOV R3,A INC R0 ; PSAIDA=PSAIDA +1 CLR A MOVC A,@A+DPTR CJNE A,#1,INCREMENTA ; TAB(P) = 1 ? RET ; If yes, ENDINCREMENTA: ; If No, P <- P+1 INC DPTR LJMP COM1 ; goto COM1TAB: DW 10000 DW 1000 DW 100 DW 10 DW 1;------------------------------- Cut here 8<---------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -