📄 dectobin.asm
字号:
;***************************************************************************;;* CONVERTS 5 DIGIT DECIMAL NUMBER INTO 3 BYTES BINARY NUMBER *;;***************************************************************************;BIN_1 EQU 42H ; LSBBIN_2 EQU 41H ; MIDDLE SBBIN_3 EQU 40H ; MSBDEC_1 EQU 50H ; TEN THOUSANDS OF 5 DIGIT DECIMAL NUMBERDEC_2 EQU 51H ; THOUSANDS OF 5 DIGIT DECIMAL NUMBERDEC_3 EQU 52H ; HUNDREDS OF 5 DIGIT DECIMAL NUMBERDEC_4 EQU 53H ; TENS OF 5 DIGIT DECIMAL NUMBERDEC_5 EQU 54H ; UNITS OF 5 DIGIT DECIMAL NUMBERFACTOR EQU 60H ; AUXILLIARY VARIABLE;***************************************************************************;;**** MAIN CODE ****:;***************************************************************************;;***************************************************************************;;*** EXAMPLE ****;;***************************************************************************;;** TO CONVERT 5 DIGIT DECIMAL NUMBER <12345> INTO 3 BYTES BINARY NUMBER ***;;**************************************************************************** MOV R2,#00 ; NEW LINE ; \ MOV BIN_1,#00 ; | MOV BIN_2,#00 ; | 3 BYTES BINARY OUTPUT MOV BIN_3,#00 ; | ; / MOV DEC_1,#05D ; UNITS MOV DEC_2,#04D ; TENS MOV DEC_3,#03D ; HUNDREDS MOV DEC_4,#02D ; THOUSANDS (1st Decimal place) MOV DEC_5,#01D ; TEN THOUSANDS (2nd Decimal place) MOV A,DEC_1 ; TAKE THE UNITS DIRECTLY AS IT IS TO THE LSB MOV BIN_1,A MOV A,DEC_2 ; TAKE THE TENS BY MULTIPLYING WITH #10D AND MOV B,#10 ; AND ADDING TO THE LSB MUL AB ADD A,BIN_1 MOV BIN_1,A MOV R0,#52H ; THE ADDRESS OF 3rd DIGIT MOV FACTOR,#00D ; INITIALIZE AS ZERO MOV A,@R0 ; TAKE THE 3rd DIGIT INTO R1 FOR PROCESSING MOV R1,A CJNE R1,#00,LOOP ; SKIP IF THE DIGIT IS A ZERO SJMP ITS_ZEROLOOP MOV A,#100D ; ADD CONSTANT 100D TO LSB AS MANY TIMES CLR C ADD A,BIN_1 MOV BIN_1,A JNC NO_EXCEED INC BIN_2 ; INCREASE THE NEXT HIGHER BYTES WHEN THE LSB MOV A,BIN_2 ; OVERFLOWS CJNE A,#00H,NO_EXCEED INC BIN_3NO_EXCEED DJNZ R1,LOOP;----------- CJNE R2,#00,CONTINUE SJMP ITS_ZEROCONTINUE DEC R2 SJMP LOOP;-----------ITS_ZERO INC R0 ; GET NEXT DIGIT WHEN THE LOOP EXHAUSTS CJNE R0,#55H,PROCEED ; GET OUT WHEN ALL THE 3 DIGITS HAVE BEEN ; WORKED UPON. (1st and 2nd digits are used ; before the loop) SJMP OUT_LOOPPROCEED INC FACTOR ; CALCULATE AS HOW MANY TIMES THE CONSTANT MOV A,@R0 ; 100D HAS TO BE ADDED TO LSB DEPENDING ON CJNE A,#00,NOT_ZERO ; THE VALUE OF THE DIGIT ACQUIRED BY @R0 SJMP ITS_ZERONOT_ZERO PUSH FACTORMULTIPLY MOV B,#10D CLR OV MUL AB JNB OV,SINGLE PUSH ACC MOV A,B ADD A,R2 MOV R2,A POP ACCSINGLE DJNZ FACTOR,MULTIPLY MOV R1,A POP FACTOR SJMP LOOPOUT_LOOP MOV R1,BIN_2 MOV R2,BIN_1 MOV R0,BIN_3 END*****************************************************************************IDEA:***************************************************************************** LSB+ (DEC_1)+ (DEC_2 x 10D)+ (DEC_3 x 1 x 100D)+ (DEC_4 x 10 x 100D)+ (DEC_5 x 100 x 100D)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -