1. (填空题)
在以BLOCK为首地址处存放100个无符号字节数。试编写一程序,求出该数组中的最大数与最小数的差,并将其送入RESULT单元,要求调用子程序来完成对最大数和最小数的求解。
DATA SEGMENT
BLOCK DB 56,42,66,87,88,88,68,67,58,97,66,86,77
COUNT EQU $-XX
RESULT DB 0
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA
START:
MOV AX, (第1空)
MOV DS, AX
MOV (第2空), 100 ;假设最小的数
MOV (第3空), 0 ;假设最大的数
LEA SI, (第4空)
MOV CX, (第5空)
CALL MAXMIN
SUB AH,AL
MOV RESULT,(第6空)
EXIT: MOV AX, 4C00H
INT 21H
MAXMIN PROC
MOV AH,0 ;存放大数
MOV AL,255 ;存放小数
AGAIN: MOV DL,(第7空)
CMP (第8空),DL
JBE SKIP1
MOV AL,DL ;比预设最小值还小,保留
SKIP1: CMP AH,DL
JAE SKIP2
MOV AH,DL ;比预设最大值还大,保留
SKIP2: (第9空) SI
LOOP (第10空)
RET
MAXMIN ENDP
CODE ENDS
END START
MOV AX, (第1空)
:这个指令将数据段的段地址放入AX寄存器。通常,数据段地址是通过符号化名称(DATA)来表示的。所以第1空应填 DATA
。
MOV (第2空), 100
:这里要将数字100放到一个寄存器中。这个寄存器将用来遍历数组。一般使用CX寄存器进行循环,所以第2空应填 CX
MOV (第3空), 0
:这里是将假设的最大值设为0。我们使用AH寄存器存储最大值,因此第3空应填 AH
。
LEA SI, (第4空)
:这里要将数组的起始地址放入SI寄存器。这个数组在BLOCK中,所以第4空应填 BLOCK
。
MOV CX, (第5空)
:这里已经在第2空中使用了CX寄存器,所以这条指令是不必要的,可以删除或者忽略。
MOV RESULT,(第6空)
:这里要将结果存入RESULT单元中。所以第6空应填 AH
(因AH存储了最大值减去最小值后的结果)。
MOV DL,(第7空)
:这里要将当前数组元素(由SI指向的)加载到DL寄存器中。因此第7空应填 [SI]
。
CMP (第8空),DL
:这里是将当前元素与当前最小值进行比较。AL存储最小值,因此第8空应填 AL
。
SKIP2: (第9空) SI
:这里是要将SI指针移动到下一个元素。通常使用 INC SI
来实现。
LOOP (第10空)
:这里是控制循环返回到 AGAIN
标签处。