题目:
编程将数组array中存放的若干个十进制的最大值找出来并且存放到max。array及max、min的定义如下:
array db 8,68,15,22,37,6,58,48,96,2,4,109
max db?
min db?
代码如下:
DATA SEGMENT
array db 8,68,15,22,37,6,58,48,96,2,4,109
NUM dw $-array
max db?
min db?
STRING1 db’The max number is:’,’$’
STRING2 db 0dh,0ah, ‘The min number
is:’,’$’
DATA ENDS
STACK SEGMENT
STACK ENDS
CODE SEGMENT
ASSUME
CS:CODE,DS:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX ;设置DS
MOV CX,NUM-1 ;设置循环次数
LEA SI,array ;取NUMBER偏移地址给SI指针
MOV BL,[SI] ;取第一个数为最小值
MOV BH,[SI] ;取第一个数为最大值
L: INC SI ;指针加一
MOV AL,[SI] ;取第二个数到AL
CMP AL,BL ;比较当前数与最小值
JB X2 ;当前数小于最小值则跳转
CMP AL,BH ;否则比较当前数与最大值
JBE X1 ;当前数小于等于最大值则跳转
MOV BH,AL ;当前数比最大值大,AL->BH
X1: LOOP L ;根据CX的值判断是否继续循环
MOV MAX,BH ;把最大值存放到MAX
MOV MIN,BL ;把最小值存放到MIN
;在此处调用子程序
LEA DX,STRING1 ;输出提示1
MOV AH,09H
INT 21H
LEA SI,MAX ;使SI指向要传递的参数
CALL disp ;调用子程序
LEA DX,STRING2 ;输出提示2
MOV AH,09H
INT 21H
LEA SI,MIN ;使SI指向要传递的参数
CALL disp ;调用子程序
DONE: MOV AH,4CH
INT 21H
X2: MOV BL,AL
JMP X1
disp PROC
;子程序定义,子程序名为disp
;功能:以十进制显示AX寄存器中的数值
PUSH BX
PUSH CX
PUSH DX
MOV BL,10
MOV CL,0
CMP AX,10
JB PRINTF
W: DIV BL
PUSH AX
INC CL
MOV AH,0
CMP AX,0
JA W
p: POP DX
DEC CL
MOV DL,DH
ADD DL,48
MOV AH,2
INT 21H
CMP CL,0
JNE P
POP BX
POP CX
POP DX
RET
PRINTF: MOV DL,AL
ADD DL,48
MOV AH,2
INT 21H
POP BX
POP CX
POP DX
RET
disp ENDP
CODE ENDS
END START