;功能:按要求输入字符,计算字符中的数字之和,并以十进制和二进制输出 ;做者:KDF5000 ;时间:2012.11.2 .386 DATA SEGMENT USE16 BUF DB 80 DB ? DB 80 DUP(0) CRLF DB 0DH,0AH,'$' DB 30 DUP('$') BUF1 DB '$' TEST EQU 58 LOP1 DB 1 LOP2 DB 0 STRING1 DB '请输入字符串(第2,3个和6,7位必须为数字,咱们将会计算着四个数字的和):$' STRING2 DB '四个数字的和为:$' STRING3 DB '转化为二进制数为:$' DATA ENDS STACK SEGMENT USE16 DB 200 DUP(0) STACK ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATA MOV DS,AX ;提示输入字符串 LEA DX,STRING1 MOV AH,9 INT 21H ;输出回车换行 LEA DX,CRLF MOV AH,9 INT 21H ;开始输入 LEA DX,BUF MOV AH,10 INT 21H ;在字符串最后输入$ MOV BL,BUF+1 MOV BH,0 MOV BYTE PTR BUF+2[BX],'$' ;输出输入的字符串 ;LEA DX,BUF+2 ; MOV AH,9 ;INT 21H ;输出换行 LEA DX,CRLF MOV AH,9 INT 21H ;输出数字的和提示 LEA DX,STRING2 MOV AH,9 INT 21H ;将BX寄存器低位置0 MOV BL,0 ;取出咱们想要相加的四位数字,并累加到bl MOV DL,BUF+3 SUB DL,30H ADD BL,DL MOV DL,BUF+4 SUB DL,30H ADD BL,DL MOV DL,BUF+7 SUB DL,30H ADD BL,DL MOV DL,BUF+8 SUB DL,30H ADD BL,DL ;利用取余输出每一位 MOV CL,10 ;设置除数 MOV BH,0 MOV AX,BX MOV BP,OFFSET BUF1 LOOP: DIV CL DEC BP ADD AH,30H MOV [BP],AH CBW CMP AX,0 JNE LOOP ;尝试着用JE DISP可是却输出错误,很奇怪??? ;输出之和 DISP: MOV DX,BP MOV AH,9 INT 21H ;尝试输出二进制 ;输出回车换行 LEA DX,CRLF MOV AH,9 INT 21H ;输出二进制输出提示 LEA DX,STRING3 MOV AH,9 INT 21H ;将计算结果付给cx MOV CX,BX BIN: ;内循环 MOVE: SHL CX,1 INC LOP2 MOV AH,LOP1 MOV AL,LOP2 CMP AH,AL JNE MOVE ;外循环 ADD CH,30H MOV DL,CH MOV AH,2 INT 21H MOV CH,0 INC LOP1 CMP LOP1,9 JNE BIN MOV AH,4CH INT 21H CODE ENDS END START