附录:源代码
十进制与八进制相互转换的程序清单:
;DECIOCT
;十进制与八进制相互转换
;首先选择算法,1为八进制转十进制,2为十进制转八进制 ;***************************
DECioct SEGMENT
ASSUME CS:DECioct ;主程序部分。
main PROC FAR
start: MOV DL,3ah ; MOV AH,2 INT 21h
MOV AH,1 ; INT 21h
CMP AL,32h ;进制
JE REPEat2 ;进制
REPEat1: CALL octbin ; CALL crlf ; CALL binidec ; CALL crlf ; JMP REPEat1 ;
REPEat2: CALL DECibin ;制
CALL crlf ; CALL binioct ; CALL crlf ;
JMP REPEat2 ; main ENDP
;-----------------------------
显示提示附 输入选择数字 数字为1时,执行八进制转十数字为2时,执行十进制转八键盘输入八进制数转为二进制 回车并换行 二进制转十进制 回车并换行 重复执行 键盘输入十进制数转为二进回车并换行 二进制转八进制
回车并换行 重复执行 10
;十进制转二进制
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 CL,2 ROL BL,CL MOV AL,BL AND AL,03h ADD AL,30h MOV DL,AL MOV AH,2 INT 21h
MOV CH,2 rotate2:
MOV CL,3 ROL BL,CL MOV AL,BL AND AL,07h ADD AL,30h MOV DL,AL MOV AH,2 INT 21h
DEC CH
如果大于则不是十进制数 字节转为字 交换寄存器 把10放如CX 扩大10倍 交换寄存器
原数的10倍加上输入数 跳转输入 ;移位数字2 ;循环左移2位
;把输入的数送入AL ;将高六位屏蔽 ;转换为ASCII ;输出AL ;剩余显示2位 ;移位数字3 ;循环左移3位
;把输入的数送入AL ;将高五位屏蔽 ;转换为ASCII ;输出AL ;递减CH
11
JNZ rotate2 ;CH不为0则跳转 RET binioct ENDP
;--------------------------------------- ;八进制转二进制
octbin PROC NEAR
MOV BX,0 NEwchar1:
MOV AH,1 INT 21h
SUB AL,30h JL exit1
CMP AL,8d JL ADD_to1
CMP AL,10h JGE exit1 ADD_to1:
MOV CL,3 SHL BX,CL MOV AH,0 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
;---------------------------------------
;BX清零 ;输入数字 ;转换为二进制数 ;如果<8则跳转 ;移位数字3 ;左移3位 ;AH清0
;把新位移入数字 ;跳转继续输入 ;除数为10000 ;除数为1000 ;除数为100 ;除数为10 ;除数为1 12
;子程序
DEC_div PROC NEAR
MOV AX,BX ;把二进制数移入AX MOV DX,0 ;DX高八位清零 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
;回车 ;输出 ;换行 ;输出 13
十六进制与十进制相互转换的程序清单:
;DECIOCT
;十进制与十六进制相互转换
;首先选择算法,1为十六进制转十进制,2为十进制转十六进制 ;***************************
DECioct SEGMENT
ASSUME CS:DECioct ;主程序部分。
main PROC FAR
start: MOV DL,3ah ; MOV AH,2 INT 21h
MOV AH,1 ; INT 21h
CMP AL,32h ;十进制
JE REPEat2 ;六进制
REPEat1: CALL octbin ;制
CALL crlf ; CALL binidec ; CALL crlf ; JMP REPEat1 ;
REPEat2: CALL DECibin ;制
CALL crlf ; CALL binioct ; CALL crlf ;
JMP REPEat2 ; main ENDP
;----------------------------- ;十进制转二进制
显示提示附 输入选择数字 数字为1时,执行十六进制转数字为2时,执行十进制转十键盘输入十六进制数转为二进回车并换行 二进制转十进制 回车并换行 重复执行 键盘输入十进制数转为二进回车并换行 二进制转十六进制
回车并换行 重复执行 14