已知在 DATA 开始的字单元中存放有 10 个无符号整数,试编制程序挑选出其 中的最大值和最小值并显示。利用EMU8086编写
时间: 2024-05-14 17:12:02 浏览: 72
c代码-6.3输出10个数的最大值和最小值的大小和下标
以下是使用EMU8086汇编语言编写的程序:
```
; 数据段
DATA SEGMENT
NUMS DB 20, 15, 30, 12, 25, 18, 22, 17, 28, 21 ; 存放的无符号整数
MAX DB 0 ; 最大值
MIN DB 255 ; 最小值
DATA ENDS
; 代码段
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA ; 初始化数据段寄存器
MOV DS, AX
; 找到最大值
MOV CX, 10 ; 循环10次
MOV SI, 0 ; 数组下标
MOV AL, NUMS[SI] ; 初始化最大值为第一个数
FIND_MAX:
CMP AL, NUMS[SI] ; 比较当前数和最大值
JAE SKIP_MAX ; 如果当前数不大于最大值,则跳过
MOV AL, NUMS[SI] ; 更新最大值
SKIP_MAX:
INC SI ; 增加数组下标
LOOP FIND_MAX ; 继续循环
MOV MAX, AL ; 将最大值存入内存
; 找到最小值
MOV CX, 10 ; 循环10次
MOV SI, 0 ; 数组下标
MOV AL, NUMS[SI] ; 初始化最小值为第一个数
FIND_MIN:
CMP AL, NUMS[SI] ; 比较当前数和最小值
JBE SKIP_MIN ; 如果当前数不小于最小值,则跳过
MOV AL, NUMS[SI] ; 更新最小值
SKIP_MIN:
INC SI ; 增加数组下标
LOOP FIND_MIN ; 继续循环
MOV MIN, AL ; 将最小值存入内存
; 显示结果
MOV AH, 09H ; 设置显示字符串的功能号
LEA DX, MSG_MAX ; 加载最大值的提示消息
INT 21H ; 显示最大值的提示消息
MOV DL, MAX ; 加载最大值
ADD DL, 30H ; 转换为ASCII码
MOV AH, 02H ; 设置显示单个字符的功能号
INT 21H ; 显示最大值
MOV DL, 0DH ; 换行符
MOV AH, 02H ; 设置显示单个字符的功能号
INT 21H ; 显示换行符
MOV AH, 09H ; 设置显示字符串的功能号
LEA DX, MSG_MIN ; 加载最小值的提示消息
INT 21H ; 显示最小值的提示消息
MOV DL, MIN ; 加载最小值
ADD DL, 30H ; 转换为ASCII码
MOV AH, 02H ; 设置显示单个字符的功能号
INT 21H ; 显示最小值
MOV DL, 0DH ; 换行符
MOV AH, 02H ; 设置显示单个字符的功能号
INT 21H ; 显示换行符
MOV AH, 4CH ; 设置程序结束的功能号
INT 21H ; 结束程序
MSG_MAX DB '最大值为:$'
MSG_MIN DB '最小值为:$'
CODE ENDS
END START
```
运行程序后,屏幕上将显示最大值和最小值。例如,对于上面的示例数据,程序的输出结果如下:
```
最大值为:30
最小值为:12
```
阅读全文