?? convert.txt
字號:
STACK_SEG SEGMENT STACK
STACK_BUF DW 120 DUP(?)
TOP EQU $-STACK_BUF
STACK_SEG ENDS
DATA_SEG SEGMENT PARA
TS DB 0AH,0DH, 'PROGRAM TO CONVERT BINARY (DECIMAL,OCTAL,HEXADECIMAL)NUMBER ON KEYBOARD TO HEXADECIMAL (BINARY,OCTAL,DECIMAL)NUMBER ON SCREEN:$'
DATA_SEG ENDS
CODE_SEG SEGMENT PARA
;------------------------------------------------------
MAIN PROC FAR
ASSUME CS:CODE_SEG,DS:DATA_SEG
ASSUME SS:STACK_SEG
START:
MOV AX,STACK_SEG
MOV SS,AX
MOV SP,TOP
MOV AX,DATA_SEG
MOV DS,AX
MOV AH,09
MOV AL,'*'
MOV BH,0
MOV BL,9EH
MOV CX,80
INT 10H
MOV AH,1
INT 21H
CALL DISP
BEGIN: CALL CRLF
MOV AH,8
INT 21H
CMP AL,'B'
JZ BIN
CMP AL,'D'
JZ DECI
CMP AL,'O'
JZ OCTA
CMP AL,'H'
JZ HEXA
JMP BEGIN
BIN:
CALL BINIARY
JMP EQUAL
DECI:
CALL DECIBIN
JMP EQUAL
OCTA:
CALL OCTABIN
JMP EQUAL
HEXA: CALL HEXABIN
JMP EQUAL
EQUAL:
MOV AH,2
MOV DL,'='
INT 21H
MOV AH,1
INT 21H
CMP AL,'B'
JZ RBINI
CMP AL,'D'
JZ RDECI
CMP AL,'O'
JZ ROCTA
CMP AL,'H'
JZ RHEXA
RBINI:
CALL BINIBIN
JMP THEEND
RDECI: CALL BINIDEC
JMP THEEND
ROCTA: CALL BINIOCT
JMP THEEND
RHEXA: CALL BINIHEX
JMP THEEND
THEEND: MOV AH,1
INT 21H
CMP AL,0DH
JNZ BEGIN
DONE: MOV AX, 4C00H
INT 21H
MAIN ENDP
CRLF PROC NEAR
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
RET
CRLF ENDP
DISP PROC NEAR
MOV AH,9
LEA DX,TS
INT 21H
RET
DISP ENDP
BINIARY PROC NEAR
MOV DL,'B'
MOV AH,2
INT 21H
MOV BX,0
NEWCHAR:
MOV AH,1
INT 21H
CMP AL,' '
JZ EXIT
SUB AL,30H
JL EXIT
CMP AL,1D
JG NEWCHAR
CBW
SHL BX,1D
ADD BX,AX
JMP NEWCHAR
EXIT:
RET
BINIARY ENDP
OCTABIN PROC NEAR
MOV DL,'O'
MOV AH,2
INT 21H
MOV BX,0
NEWNUM: MOV AH,1
INT 21H
CMP AL,' '
JZ RETU
SUB AL,30H
CMP AL,7D
JG RETU
CBW
XCHG AX,BX
MOV CX,8D
MUL CX
XCHG AX,BX
ADD BX,AX
JMP NEWNUM
RETU:
RET
OCTABIN ENDP
DECIBIN PROC NEAR
MOV DL,'D'
MOV AH,2
INT 21H
MOV BX,0
NEWDEC:
MOV AH,1
INT 21H
CMP AL,' '
JZ BACK
SUB AL,30H
JL BACK
CMP AL,9D
JG NEWDEC
CBW
XCHG AX,BX
MOV CX,10D
MUL CX
XCHG AX,BX
ADD BX,AX
JMP NEWDEC
BACK: RET
DECIBIN ENDP
HEXABIN PROC NEAR
MOV DL,'H'
MOV AH,2
INT 21H
MOV BX,0
IHEXA: MOV AH,1
INT 21H
CMP AL,' '
JZ ENDH
SUB AL,30H
CMP AL,0AH
JL CONU
SUB AL,7H
CONU:
CBW
XCHG AX,BX
MOV CX,16D
MUL CX
XCHG AX,BX
ADD BX,AX
JMP IHEXA
ENDH: RET
HEXABIN ENDP
BINIHEX 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
BINIHEX ENDP
BINIDEC PROC NEAR
MOV CX,10000D
CALL DECDIV
MOV CX,1000D
CALL DECDIV
MOV CX,100D
CALL DECDIV
MOV CX,10D
CALL DECDIV
MOV CX,1D
CALL DECDIV
RET
BINIDEC ENDP
DECDIV PROC NEAR
MOV AX,BX
MOV DX,0D
DIV CX
MOV BX,DX
MOV DL,AL
ADD DL,30H
MOV AH,2
INT 21H
RET
DECDIV ENDP
BINIOCT PROC NEAR
MOV CH,5
ROL BX,1
MOV AL,BL
AND AL,1H
ADD AL,30H
JMP PUTOUT
OCT:
MOV CL,3
ROL BX,CL
MOV AL,BL
AND AL,7H
ADD AL,30H
DEC CH
PUTOUT: MOV DL,AL
MOV AH,2
INT 21H
JNZ OCT
RET
BINIOCT ENDP
BINIBIN PROC NEAR
MOV CH,16
BINI: MOV CL,1
ROL BX,CL
MOV AL,BL
AND AL,1H
ADD AL,30H
MOV AH,2
MOV DL,AL
INT 21H
DEC CH
JNZ BINI
RET
BINIBIN ENDP
;------------------------------------------------------
CODE_SEG ENDS
END START
實驗結果:
********************************************************************************
PROGRAM TO CONVERT BINARY (DECIMAL,OCTAL,HEXADECIMAL)NUMBER ON KEYBOARD TO HEXAD
ECIMAL (BINARY,OCTAL,DECIMAL)NUMBER ON SCREEN:
B100 =B0000000000000100
B100 =O000004
B100 =D00004
B100 =H0004
O100 =B0000000001000000
O100 =O000100
O100 =D000640
O100 =H0040
D100 =B0000000001100100
D100 =O000144
D100 =D00100
D100 =H0064
H100 =B0000000100000000
H100 =O000400
H100 =D00256
H100 =H0100
HAB =D00171
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -