📄 10to2.asm
字号:
TITLE CONVERT DECIMAL TO BINARY
DATA SEGMENT
PROMPT DB 0AH,0DH,'INPUT DECIMAL NUMBER: $'
PROMPT2 DB 0AH,0DH,'$'
DECI DB 3,0,3 DUP(0)
DEC2 DB 3 DUP(0)
BIN DW ?
A DW ?
B DW ?
C DW ?
DATA ENDS
STACK1 SEGMENT PARA STACK
DW 20H DUP(0)
STACK1 ENDS
COSEG SEGMENT
ASSUME CS:COSEG,DS:DATA,SS:STACK1
DECBIN: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET PROMPT ;提示输入第一个数
MOV AH,09H
INT 21H
MOV DX,OFFSET DECI ;输入第一个十进制
MOV AH,0AH
INT 21H
MOV DX,OFFSET PROMPT2 ;换行
MOV AH,09H
INT 21H
MOV BX,OFFSET DECI+1
MOV CL,[BX] ;取输入的十进制数位数
MOV CH,0
LOP1: INC BX ;十进制数字符转换为
AND BYTE PTR [BX],0FH ;4位二进制数
LOOP LOP1
;多位十进制数转换为二进制
MOV BX,OFFSET DECI+2 ;取十进制数首址
MOV CL,-1 [BX] ;取十进制数位数
MOV AX,0
LOP2: MOV BIN,AX ;乘10
SAL AX,1
SAL AX,1
ADD AX,BIN
SAL AX,1
ADD AL,[BX] ;加1位十进制数
ADC AH,0
INC BX ;修改指针
LOOP LOP2
MOV A,AX ;存结果
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV DX,OFFSET PROMPT ;提示输入第二个数
MOV AH,09H
INT 21H
MOV DX,OFFSET DECI ;输入第二个十进制
MOV AH,0AH
INT 21H
MOV DX,OFFSET PROMPT2 ;换行
MOV AH,09H
INT 21H
MOV BX,OFFSET DECI+1
MOV CL,[BX] ;取输入的十进制数位数
MOV CH,0
LOP11: INC BX ;十进制数字符转换为
AND BYTE PTR [BX],0FH ;4位二进制数
LOOP LOP11
;多位十进制数转换为二进制
MOV BX,OFFSET DECI+2 ;取十进制数首址
MOV CL,-1 [BX] ;取十进制数位数
MOV AX,0
LOP22: MOV BIN,AX ;乘10
SAL AX,1
SAL AX,1
ADD AX,BIN
SAL AX,1
ADD AL,[BX] ;加1位十进制数
ADC AH,0
INC BX ;修改指针
LOOP LOP22
MOV B,AX ;存结果
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;做运算 C=3A+2B
MOV DX,A
SAL DX,1
ADD DX,A
SAL B,1
ADD DX,B
MOV C,DX
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;二进制转换成十进制
LEA DI,DEC2+2
MOV AX,C
MOV BX,10
LOP: MOV DX,0
DIV BX
MOV [DI],DL
DEC DI
CMP AX,0
JNE LOP
;单字符输出 判断是否三位
LEA SI,DEC2
CMP BYTE PTR[SI],0
JE LIANGWEI
ADD BYTE PTR[SI],30H
MOV DL,[SI]
MOV AH,02H
INT 21H
LIANGWEI: INC SI
ADD BYTE PTR[SI],30H
MOV DL,[SI]
MOV AH,02H
INT 21H
INC SI
ADD BYTE PTR[SI],30H
MOV DL,[SI]
MOV AH,02H
INT 21H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV AH,4CH
INT 21H
COSEG ENDS
END DECBIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -