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

📄 bintoasc.asm

📁 8051 进行加解密的源代码
💻 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 + -