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


本文标签: 输入 二进制 显示 文件 数据