汇编语言实现四个以内十六进制的数到二进制的转换并输出.docVIP

  • 60
  • 0
  • 约2.86千字
  • 约 5页
  • 2018-11-26 发布于浙江
  • 举报

汇编语言实现四个以内十六进制的数到二进制的转换并输出.doc

汇编语言实现四个以内十六进制的数到二进制的转换并输出

;程序功能:将四个16进制数(可以是数字以及A~F大小写均可以)转换成2进制数输出;程序举例:输入1234; 输出 0001 0010 0011 0100;-----------数据段定义-------------DATAS SEGMENTDATA DB 10,?,10 DUP(?)RES DB 10 DUP(?) ;存放最后输入的4个数DATA0 DB Please input Hexadecimal numbers :,$ DATA1 DB The string is wrong,please input again:,$DATA2 DB ,$ ;这个字符串是为了输出空格DATA3 DB The binary number you have input is:,0AH,0DH,$DATAS ENDS;-----------堆栈段-------------------STACK SEGMENT DW 256 DUP(?)STACK ENDS;-----------代码段-------------------CODE SEGMENT ASSUME DS:DATAS,SS:STACK,CS:CODESTART: MOV AX,DATAS MOV DS,AX MOV DX,OFFSET DATA0 ;9号功能调用输出提示信息 MOV AH,9 INT 21HL0: MOV DX,OFFSET DATA ;输入16进制数(可以使1至9个) MOV AH,10 INT 21H CALL INPUT ;函数调用 CALL NEWLINE CALL OUTPUTEXIT: MOV AH,4CH INT 21H ;************将输入的字符串放到DX中***********INPUT PROC NEAR PUSH CX PUSH DX PUSH SI PUSH DI CALL NEWLINE MOV DI,2 MOV CX,0 MOV CL,DATA[1] ;将输入的十六进制数个数存入CX;///////////////判断所有字符是否正确 LOOP0: SUB DATA[DI],30H ;首先减去30H比较 JL INAGAIN CMP DATA[DI],9 JLE COMPARE SUB DATA[DI],07H ;若为A-F再减去7H JL INAGAIN CMP DATA[DI],15 JLE COMPARE SUB DATA[DI],20H ;若为a-f再减去20H JL INAGAIN CMP DATA[DI],15 JLE COMPARE INAGAIN: CALL NEWLINE ;若输入不符合十六进制数规则,报错,从新输入 CALL ERROR JMP L0 COMPARE: INC DI LOOP LOOP0 JMP DEAL ;////////////将后4位存入数组res DEAL: MOV DI,0 ;DI作为数组res的下标 MOV CX,0 MOV CL,DATA[1] ;将个数存入cl,再转到SI中 CMP CX,4 JAE NEXT0 MOV SI,1 ;个数小于4时处理 JMP REAL NEXT0: MOV SI,CX SUB SI,3 ;将十六进制数个数中内容装换成对应下标 MOV DX,0 MOV CX,4 ;(改成更多要修改此处)cx为存入res中十六进制数个数REAL: INC SI MOV DL,DATA[SI] ;将输入的数字后4位存入res数组中 MOV RES[DI],DL INC DI LOOP REAL POP DI POP SI POP DX POP CX RET INPUT ENDP ;************将输入的数输出************OUTPUT PROC NEAR PUSH AX PUSH BX PUSH DX PUSH CX PUSH DI MOV DX,OFFSET DATA3 ;提示信息 MOV AH,9 INT 21H CALL NEWLINE ;换行 MOV DI,0 MOV DX,0 MOV CX,0 ;将cx清0便于后面计数 MOV CL,DATA[1] CMP CL,4 ;改成更多要修改此处,将CX中放入输入的16进制数个数

文档评论(0)

1亿VIP精品文档

相关文档