从键盘输入10个无符号十进制数(小于256),将其转换为二进制数并存放在NUM字节型变量中,找出其中的最大数,并将找出的最大数在屏幕上显示出来。
要求:
1)在屏幕上显示字符串提示信息的功能由宏指令DSTRING实现;
2)将键盘输入的十进制数转换成二进制数由子程序DTOB实现;
3)在N个无符号字节型二进制数中找出最大数的功能由子程序FMAX实现;
4)将一个无符号字节型二进制数转换为十进制数并在屏幕上显示的功能由子程序BTOAD实现。
COUNT EQU 10
DATA SEGMENT
NUM DB 10 DUP(?)
IBUF DB 7,0,6 DUP(?)
OBUF DB 6 DUP(?)
INFOR1 DB "Please input 10 numbers(<256):",0AH,0DH,'$'
INFOR2 DB "The max found in the 10 numbers is $"
INFOR3 DB 0AH,0DH,'$'
DATA ENDS
STACK SEGMENT stack
DATA2 DW 40 DUP(?)
TOP EQU LENGTH DATA2
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV AX,TOP
MOV SP,AX
DSTRING MACRO STRING
PUSH DX
PUSH AX
MOV DX,OFFSET STRING
MOV AH,09H
INT 21H
POP AX
POP DX
ENDM
DSTRING INFOR1
MOV BX,OFFSET NUM
MOV CX,COUNT
LOOP1: CALL DTOB
DSTRING INFOR3
MOV [BX],AL
INC BX
;
LOOP LOOP1
MOV AX,OFFSET NUM
PUSH AX
MOV CX,COUNT
PUSH CX
CALL FMAX
DSTRING INFOR2
CALL BTOAD
MOV AH,4CH
INT 21H
FMAX PROC
PUSH CX ;
PUSH SI ;
MOV AL,NUM
MOV SI,OFFSET NUM
MOV CX,9
ONCEMORE:
INC SI
CMP AL,[SI]
JAE NOCHANGE
XCHG AL,[SI]
NOCHANGE:
DEC CX
JNE ONCEMORE
MOV AH,0
POP SI ;
POP CX ;
RET
FMAX ENDP
BTOAD PROC ;子程序,将最大数在屏幕上显示
PUSH BX
PUSH CX
PUSH DX
MOV BX,OFFSET OBUF+5
MOV BYTE PTR[BX],'$'
MOV CX,10
LOOP2: MOV DX,0
DIV CX
ADD DL,30H
DEC BX
MOV [BX],DL
OR AX,AX
JNZ LOOP2
MOV DX,BX
;MOV DL,0AH
;MOV AH,02H
;INT 21H
MOV AH,09H
INT 21H
POP DX
POP CX
POP BX
RET
BTOAD ENDP
DTOB PROC ;子程序,从键盘输入一个小于256的数
PUSH CX ;
PUSH DX ;
PUSH SI ;
MOV DX,OFFSET IBUF
MOV AH,0AH
INT 21H
MOV CL,IBUF+1
MOV CH,0
MOV SI,OFFSET IBUF+2
MOV AX,0
AGAIN: MOV DX,10
MUL DX
AND BYTE PTR[SI],0FH
ADD AL,[SI]
ADD AH,0
INC SI
LOOP AGAIN
POP SI ;
POP DX ;
POP CX ;
RET
DTOB ENDP
CODE ENDS
END START