目录
1.十六进制ACSII码转换为二进制显示
.586
DATA SEGMENT USE16
MESG DB ‘Please Enter!’,0DH,0AH,'$' ;0D回车,0A换行
DATA ENDS
CODE SEGMENT USE16
ASSUM CS:CODE,DS:DATA
BEG: MOV AX,DATA
MOV DS,AX
MOV AH,9
MOV DX,OFFSET MESG
INT 21H
MOV AH,01H ;等待键盘输入一个字符,AL=输入按键的ASCII码
INT 21H
CMP AL,3AH
JC NEXT1
SUB AL,07H
NEXT1: SUB AL,30H
MOV BL,AL
MOV AH,02H
MOV DL,'='
INT 21H
CALL DISP
MOV AH,2
MOV DL,'B'
INT 21H
EXIT: MOV AH,4CH
INT 21H
DISP PROC
MOV CX,8
LAST: MOV DL,'0'
RCL BL,1 ;含进位的逻辑左移,移除的数进C标志,以此判断之前的是0还是1
JNC NEXT2
MOV DL,'1'
NEXT2: MOV AH,2
INT 21H
LOOP LAST
RET
DISP ENDP
CODE ENDS
END BEG
2.十进制ACSII码转换为二进制显示
.586
DATA SEGMENT USE16
MESG DB ‘Please Enter!’,0DH,0AH,'$' ;0D回车,0A换行
BUF DB '3','4','8','9'
COUNT EQU $-BUF
DATA ENDS
CODE SEGMENT USE16
ASSUM CS:CODE,DS:DATA
BEG: MOV AX,DATA
MOV DS,AX
MOV AH,9
MOV DX,OFFSET MESG
INT 21H
MOV CX,COUNT
MOV SI,OFFSET BUF
MOV AX,0 ;AX用于存放累加和,清0
MOV DH,0 ;CLEAR DH
MOV BX,10
AGA: MUL BX
MOV DL,[SI]
SUB DL,20H
ADD AX,DX
INC SI
LOOP AGA
MOV BX,AX
CALL DISP
MOV AH,02H
MOV DL,'B'
INT 21H
EXIT: MOV AH,4CH
INT 21H
DISP PROC
MOV CX,16
LAST: MOV DL,'0'
RCL BX,1 ;含进位的逻辑左移,移除的数进C标志,以此判断之前的是0还是1
JNC NEXT
MOV DX,'1'
NEXT: MOV AH,2
INT 21H
LOOP LAST
RET
DISP ENDP
CODE ENDS
END BEG
3.BCD码转换为二进制显示
.586
CODE SEGMENT USE16
ASSUM CS:CODE
BEG: MOV BX,4567H
MOV CX,4
MOV AX,0
MOV SI,10
AGA: MUL SI
ROL BX,4
MOV DX,BX
AND DX,000FH
AND AX,DX
LOOP AGA
DISP: MOV BP,AX
MOV CX,16
LAST: MOV AL,'0'
RCL BP,1
ADC AL,0
MOV AH,0EH
INT 10H
LOOP LAST
MOV AH,4CH
INT 21H
CODE ENDS
END BEG
4.二进制数转换为十六进制数显示
.586
DATA SEGMENT USE16
BUF DW 987AH
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA
BEG: MOV AX,DATA
MOV DS,AX
MOV DX,BUF
MOV CX,4
SAL EDX,16 ;EDX中的左移16次
AGA: ROL EDX,4
AMD DL,0FH
CMP DL,10
JC NEXT
ADD DL,07H
NEXT: ADD DL,30H
MOV AH,2
INT 21H
LOOP AGA
MOV 4CH
INT 21H
CODE ENDS
END BEG
5.二进制数转换为十进制数显示
(1)使用比较法
.486
CMPDISP MACRO NN
LOCAL LAST,NEXT
MOV DL,0
LAST: CMP BEN,NN
JC NEXT
INC DL
SUB BEN,NN
JMP LAST
NEXT: ADD DL,30H
ENDM
DATA SEGMENT USE16
BEN DW 1223H
TAB DW 1000,100,10,1
COUNT EQU ($-TAB)/2
BUF DB COUNT DUP(?),'$'
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA
BEG: MOV AX,DATA
MOV DS,AX
MOV CX,COUNT
MOV BX,OFFSET TAB
MOV SI,OFFSET BUF
AGA: MOV AX,[BX]
CMPDISP AX
MOV [SI],DL
ADD BX,2
INC SI
LOOP AGA
MOV SI,OFFSET BUF
NOSP: CMP BYTE PTR [SI],30H
JNZ DISP
INC SI
JMP NOSP
DISP: MOV AH,09H
MOV DX,SI
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END BEG
(2)使用除数取余法
.586
CODE SEGMENT USE16
ASSUME CS:CODE
NUM32 DD 1234567890
BEG: MOV EAX,NUM32
MOV EBX,10
MOV CX,0
LAST:
MOV EDX,0
DIV EBX
PUSH DX
INC CX
CMP EAX,0
JNZ LAST
AGA: POP DX
ADD DL,30H
MOV AH,2
INT 21H
LOOP AGA
MOV AH,4CH
INT 21H
CODE ENDS
END BEG