;功能:按要求输入字符,计算字符中的数字之和,并以十进制和二进制输出
;作者: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
转载于:https://my.oschina.net/u/2254766/blog/334850