;功能:按要求輸入字符,計算字符中的數字之和,並以十進制和二進制輸出 ;做者: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