DECibin PROC NEAR
MOV BX,0 ;将BX清零 NEwchar2:
MOV AH,1
INT 21h ;21号中断输入 SUB AL,30h ;ASCII转二进制 JL exit2 ;<0则跳转 CMP AL,9d ;判断是否>9
JG exit2 ;如果大于则不是十进制数 CBW ; XCHG AX,BX ; MOV CX,10d ; MUL CX ;AX XCHG AX,BX ; ADD BX,AX ; JMP NEwchar2 ;exit2: RET DECibin ENDP
;---------------------------------------
;---------------------------------------
二进制转十六进制
Binioct proc near Mov ch,4 Rotate: mov cl,4 Rol bx,cl Mov al,bl And al,0fh Add al,30h Cmp al,3ah jl printit Add al,7h Printit:
Mov dl,al Mov ah,2 Int 21h Dec ch
Jnz rotate Ret Binioct endp
---------------------------------------
字节转为字 交换寄存器 把10放如CX 扩大10倍 交换寄存器
原数的10倍加上输入数跳转输入 15
十六进制转为二进制
octbin PROC NEAR
MOV BX,0 ; BX清零 NEwchar1:
MOV AH,1 ;输入数字 INT 21h
SUB AL,30h ; JL exit1
CMP AL,16d ; JL ADD_to1
CMP AL,10h JGE exit1 ADD_to1:
MOV CL,4 ; SHL BX,CL ; MOV AH,0 ;AH ADD BX,AX ; JMP NEwchar1 ;exit1: RET octbin ENDP
二进制转化为十进制
binidec PROC NEAR
MOV CX,10000d ; CALL DEC_div
MOV CX,1000d ; CALL DEC_div
MOV CX,100d ; CALL DEC_div
MOV CX,10d ; CALL DEC_div
MOV CX,1d ; CALL DEC_div RET
;--------------------------------------- ;子程序
DEC_div PROC NEAR
MOV AX,BX ; MOV DX,0 ;DX
转换为二进制数 如果<8则跳转 移位数字3 左移3位 清0
把新位移入数字 跳转继续输入 除数为10000 除数为1000 除数为100 除数为10 除数为1 把二进制数移入AX 高八位清零
16
DIV CX ;除数CX
MOV BX,DX ;余数移入BX MOV DL,AL ;商移入DL ADD DL,30h ;转换为ASCII MOV AH,2 ;输出十进制数位 INT 21h RET DEC_div ENDP
;--------------------------------------- binidec ENDP
;---------------------------------------
;回车和换行。
crlf PROC NEAR
MOV DL,0dh ; MOV AH,2 ; INT 21h
MOV DL,0ah ; MOV AH,2 ; INT 21h RET crlf ENDP
;---------------------------------------- DECioct ENDS
;***************************************** END start
回车 输出 换行 输出 17