十六进制数转换为二进制数程序
程序:
CRLF MACRO ;宏定义
PUSH AX ;把AX压入堆栈
PUSH DX ;把DX压入堆栈
MOV AH, 02H ;显示回车
MOV DL, 0DH
INT 21H
MOV AH, 02H ;显示换行
MOV DL, 0AH
INT 21H
POP DX ;弹出DX
POP AX ;弹出AX
ENDM
DATA SEGMENT ;数据段
MESS DB 'INPUT HEXNUMBER:', '$'
ERROR DB 'INPUT ERROR', 0DH, 0AH, '$'
DATA ENDS
STACK SEGMENT ;堆栈段
STA DW 32 DUP(?)
TOP DW ?
STACK ENDS
CODE SEGMENT ;代码段
ASSUME CS: CODE, DS: DATA, ES: DATA, SS: STACK
START: MOV AX, DATA ;初始化
MOV DS, AX
MOV ES, AX
MOV SP, TOP
LLL: MOV AH, 09H ;显示提示信息
MOV DX, OFFSET MESS ;把MESS的偏移地址给DX
INT 21H
CRLF
XOR DX, DX ;DX清零
二进制转换十六进制数 MOV BL, 04H ;接收字符个数
GGG: MOV AH, 01H ;接收字符
INT 21H
CMP AL, 0DH ;AL-0DH(判断是不是回车)
JZ PPP ;是回车,转PPP
CMP AL, 20H ;AL-20H(判断是不是空格)
JZ PPP ;是空格,转PPP
CMP AL, 30H ;AL-30H(判断是不是ASCII码0)
JB KKK ;不是,转KKK
SUB AL, 30H ;AL=AL-30H(将ASCII码转换成十六进制数)
CMP AL, 0AH ;AL-0AH
JB GETS ;结果小于等于0,跳转GETS
CMP AL, 11H ;AL-11H
JB KKK ;结果小于等于0,跳转KKK
SUB AL, 07H ;AL=AL-07H
CMP AL, 0FH ;AL-OFH
JBE GETS ;结果大于等于0,跳转GETS
CMP AL, 2AH ;AL-2AH
JB KKK ;结果小于等于0,跳转KKK
CMP AL, 2FH ;AL-2FH
JA KKK ;结果大于0,跳转KKK
SUB AL, 20H ;AL=AL-20H
GETS: MOV CL, 04H ;CL=04H
SHL DX, CL ;DX左移4位
XOR AH, AH ;AH清零
ADD DX, AX ;DX=DX-AX(二进制数送DX)
DEC BL ;BL=BL-1
JNZ GGG ;BL非零,跳转GGG(继续接收)
CRLF
CALL ZHXS ;调用ZHXS
CRLF
JMP LLL ;跳转LLL
KKK: PUSH DX ;把DX压入堆栈
CRLF
MOV AH, 09H ;显示错误提示信息
MOV DX, OFFSET ERROR ;把ERROR的偏移地址给DX
INT 21H
POP DX ;弹出DX
PPP: CRLF
CALL ZHXS ;调用ZHXS
MOV AX, 4C00H ;返回DOS
INT 21H
ZHXS PROC ;显示子程序
MOV CX, 0010H ;CX=0010H
MOV BX, DX ;BX=DX
TTT: ROL BX, 1 ;BX左移一位
MOV DL, BL ;DL=BL
AND DL, 01H ;DL高位清零
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论