admin 管理员组文章数量: 1086019
2024年12月23日发(作者:wpaxml文件怎么打开)
特注:代码可以优化,请读者自己
思考,运行结果绝对没问题!
实验二数制转换程序代码
二进制到十进制转换
DATAS SEGMENT
S0 DB "please input a binary (length<16):",0AH,0DH,"$"
S1 DB 18
S2 DB ? ;总长度
S3 DB 16 DUP(0);存放首地址
S4 DW ? ;存放输入的二进制数
S5 DB "The nuber is not a binary!","$"
S6 DB "Do you want to continue?(Y or N):",0AH,0DH ,"$"
TEMP DB 0
BUF DB 5 DUP (?);此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
DB 256 DUP (?) ;初始化堆栈大小为100;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV AX,STACKS
MOV SS,AX
;---------------------------------------------------
;输入一个二进制数
LOOPP:
CALL CLS
CALL HC
MOV DX,OFFSET S0 ;显示字符串s0
CALL G9
;"please input a binary (length<16):",0AH,0DH,"$"
MOV DX,OFFSET S1 ;申请16个内存空间
MOV AH,0AH ;将数输入到缓冲区
INT 21H
;------------------------------------------------------
;将输入的数据整合放到AX中
MOV SI,OFFSET S3
MOV CL,S2
MOV CH,0H
MOV AX,0H
LOOP1:
CMP BYTE PTR [SI],30H ;判断是否为二进制数
JL EXIT
CMP BYTE PTR [SI],31H
JG EXIT
MOV BL,[SI]
SUB BL,30H
MOV BH,0H
INC SI
SHL AX,1
ADD AX,BX
LOOP LOOP1
MOV S4,AX
CALL HC
;-----------------------------------------------------
;二进制转换成十进制
MOV SI,5
MOV AX,S4
MOV CX,5
MOV BX,10
LP: CWD
MOV DX,0
DIV BX
ADD DL,30H
MOV BUF [SI-1],DL
DEC SI
LOOP LP
;-------------------------------------------------
;显示结果
CALL COUNT ;找到第一个非零元的位置
MOV AL,TEMP
MOV AH,0
MOV SI,AX
MOV CX,5
LOOPPP:
MOV DL,BUF[SI]
MOV AH,02H
INT 21H
INC SI
LOOP LOOPPP
JMP EXIT1
EXIT:
CALL HC
MOV DX,OFFSET S5 ;显示字符串S5
CALL G9 ;"The nuber is not a binary!","$"
EXIT1:
CALL HC
MOV DX,OFFSET S6 ;显示字符串S6
CALL G9
;"Do you want to continue?(Y or N):",0AH,0DH ,"$"
MOV AH,1
INT 21H
CMP AL,'Y'
JE LOOPP
CMP AL,'y'
JE LOOPP
MOV AH,4CH
INT 21H
COUNT: ;判断第一个非零元的位置
MOV TEMP,0
MOV SI,0
MOV CX,4
LOO:
MOV DL,BUF[SI]
CMP DL,30H
JNE EXIT3
MOV AL,TEMP
ADD AL,1
MOV TEMP,AL
INC SI
LOOP LOO
EXIT3: RET
G9:
MOV AH,9 ;显示功能调用
INT 21H
CALL HC
RET
HC: ;
MOV DL,0AH
MOV AH,2
INT 21H
MOV DL,0DH
MOV AH,2
INT 21H
RET
CLS:
MOV AH,6 ;
MOV AL,0
MOV BH,7H
MOV CH,0
MOV CL,0
MOV DH,24
MOV DL,79
INT 10H
MOV BH,0 ;
MOV DX,0
MOV AH,2
INT 10H
RET
CODES ENDS
END START
回车换行
屏幕初始化
置光标位子
二进制到十六进制转换
DATAS SEGMENT
S0 DB "please input a binary
(length<16):",0AH,0DH,"$"
S1 DB 17
S2 DB ? ;总长度
S3 DB 16 DUP(0);存放首地址
S4 DW ? ;存放输入的二进制数
S5 DB "The nuber is not a binary!","$"
S6 DB "Do you want to continue?(Y or
N):",0AH,0DH ,"$"
S7 DB "The length of the numbei is not 16","$"
DATAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV AX,STACKS
MOV SS,AX
;---------------------------------------------------
;输入一个二进制数
LOOPP:
CALL CLS
CALL HC
MOV DX,OFFSET S0 ;显示字符串S0
CALL G9 ;"please input a binary
(length<16):",0AH,0DH,"$"
MOV DX,OFFSET S1 ;申请16个内存空间
MOV AH,0AH ;将数输入到缓冲区
INT 21H
;------------------------------------------------------
;将输入的数据整合放到AX中
MOV SI,OFFSET S3
MOV CL,S2
MOV CH,0H
MOV AX,0H
LOOP1:
CMP BYTE PTR [SI],30H ;判断是否为2进制
JL EXIT
CMP BYTE PTR [SI],31H
JG EXIT
CMP S2,10H ;判断是否为16为二进制
JNE EXIT2
MOV BL,[SI]
SUB BL,30H
MOV BH,0H
INC SI
SHL AX,1
ADD AX,BX
LOOP LOOP1
MOV S4,AX
CALL HC
;-----------------------------------------------------
;二进制变16进制并输出
MOV BX,S4
CMP BX,0
JZ ZERO
MOV CH,04H
MOV CL,04H
NEXT:
ROL BX,CL
MOV DL,BL
AND DL,0FH
ADD DL,30H
CMP DL,3AH
JB L
ADD DL,7H
L:
CALL XS
DEC CH
JNZ NEXT
JMP WEISHU
ZERO:
MOV DL,'0'
CALL XS
WEISHU:
MOV DL,'H'
CALL XS
JMP EXIT1
;-------------------------------------------------------
---------
;选择用的程序
EXIT:
CALL HC
MOV DX,OFFSET S5 ;显示字符串S5
CALL G9 ; "The nuber is not a binary!","$"
JMP EXIT1
EXIT2:
CALL HC
MOV DX,OFFSET S7 ;显示字符串S7
CALL G9 ; "The length of the numbei is not
16","$"
EXIT1:
CALL HC
MOV DX,OFFSET S6
CALL G9 ;显示字符串S6
MOV AH,1 ;"Do you want to continue?(Y or
N):",0AH,0DH ,"$"
INT 21H
CMP AL,'Y'
JE LOOPP
CMP AL,'y'
JE LOOPP
MOV AH,4CH
INT 21H
G9:
MOV AH,9 ;显示功能调用
INT 21H
CALL HC
RET
HC: ;回车换行
MOV DL,0AH
MOV AH,2
INT 21H
MOV DL,0DH
MOV AH,2
INT 21H
RET
CLS:
MOV AH,6 ;屏幕初始化
MOV AL,0
MOV BH,70H
MOV CH,0
MOV CL,0
MOV DH,24
MOV DL,79
INT 10H
MOV BH,0 ;置光标位子
MOV DX,0
MOV AH,2
INT 10H
RET
XS: ;2号功能显示
MOV AH,2
INT 21H
RET
CODES ENDS
END START
版权声明:本文标题:汇编二进制转十进制,十六进制代码 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1734980222a1617728.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论