老师要求是:输出学号和姓名,
输入数并以空格间隔
能判断错误的输入
能够循环判断
编程思路:
先输出学号和姓名
输出"Input datas(0 - 9999):"
然后输入数字,以空格间隔
错误判断
比较数的大小
转换为十进制
按回车,输出最大数
再循环输入数字
* 比较(compare)过程:
定义一个空间buffer,初值为0
输入数字,转换为十进制,数字存储在bx中
当按下空格后,进行比较(compare)
先把buffer中的值存储到dx中,再比较bx和dx谁大,谁大就把谁存进buffer中
循环再输入数字,在进行比较
最后回车限于跳转问题,另外用store存储,
* 差错处理:
当输入小于0,或大于9的字符时,跳到wrong,输出"Wrong number, please input again!"
在跳到开始,初始化数据,重新输入
DATAS SEGMENT
STRING DB 13,10,'0913070209, Li Pengfei',13,10,'$'
WORD0 DB '****************************************************',0AH,0DH,'$'
WORD1 DB 'Input datas(0 - 9999):',0AH,0DH,'$'
WORD2 DB 'Wrong number, please input again!',0AH,0DH,'$'
OUTPUT DB 'The max data is:',0AH,0DH,'$'
SPACE DB 0AH,0DH,'$' ;回车
buffer DW 10 DUP(0) ;存输入字符
DATAS ENDS
STACKS SEGMENT
DB 20H DUP(?)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
LEA DX,STRING ;输出学号,姓名
MOV AH,9
INT 21H
MOV DX,OFFSET WORD0
MOV AH,09H
INT 21H
again:
MOV bx,0 ;全部清零
MOV dx,0
MOV buffer,0
MOV DX,OFFSET SPACE ;换行
MOV AH,09H
INT 21H
MOV DX,OFFSET WORD1 ; "input the datas:"
MOV AH,09H
INT 21H
MOV dx,OFFSET SPACE ;换行
MOV AH,09H
INT 21H
CALL input ;开始输入数字
over:
MOV dx,OFFSET SPACE ;换行
MOV AH,09H
INT 21H
MOV dx,OFFSET SPACE ;换行
MOV AH,09H
INT 21H
MOV dx,OFFSET OUTPUT ;显示字符串
MOV AH,09H
INT 21H
MOV dx,OFFSET SPACE ;换行
MOV AH,09H
INT 21H
CALL toTen ;开始转换成十进制
MOV dx,OFFSET SPACE ;换行
MOV AH,09H
INT 21H
JMP again
MOV AH,4CH ;返回DOS
INT 21H
;*************************子程序input***************************
input proc near
MOV bx,0
newchar:
MOV AH,01H ;输入
INT 21H
CMP AL,20H ;输入空格跳到compare
JE compare
CMP AL,0DH ;输入回车,跳到over,输出结果
JE store
SUB AL,30H
JL wrong ;如果小于0
CMP al,9d ;如果大于9
JG wrong
cbw
XCHG ax,bx
MOV cx,10d
MUL cx
XCHG ax,bx
ADD bx,ax
JMP newchar
compare:
MOV dx,buffer ;先取出buffer中的数据
CMP dx,bx ;比较大小
JGE max ;DX大,就跳到max
MOV buffer,bx ;如果BX大,放在buffer中
MOV bx,0
JMP newchar
max:
MOV buffer,dx ;存较大的数据DX
MOV bx,0
JMP newchar
store:
MOV dx,buffer ;先取出buffer中的数据
MOV buffer,bx ;把bx中的数据赋给buffer
CMP dx,bx ;比较大小
JGE max2 ;DX大,就跳到max
MOV buffer,bx ;如果BX大,放在buffer中
JMP over
max2:
MOV buffer,dx ;存较大的数据DX
JMP over
wrong:
MOV dx,OFFSET SPACE ;换行
MOV AH,09H
INT 21H
MOV DX,OFFSET WORD2 ;"Wrong number, please input again!"
MOV AH,09H
INT 21H
MOV dx,OFFSET SPACE ;换行
MOV AH,09H
INT 21H
MOV dx,OFFSET SPACE ;换行
MOV AH,09H
INT 21H
JMP again
exit:
ret
input endp
;********************************************************************
;***************************子程序toTen*****************************
toTen proc near ;转换成十进制
mov bx,buffer
mov cx,1000d
call trans
mov cx,100d
call trans
mov cx,10d
call trans
mov cx,1d
call trans
ret
toTen endp
;********************************************************************
;******************************子程序trans**************************
trans proc near
mov ax,bx
mov dx,0
div cx
mov bx,dx
mov dl,al
add dl,30h
mov ah,02h
int 21h
ret
trans endp
;********************************************************************
CODES ENDS
END START