8086汇编语言设计一个程序,求10个无符号数的最大值和最小值
时间: 2024-05-05 18:16:33 浏览: 254
这个程序可以使用循环来实现。首先,需要读入10个无符号数并保存在内存中。然后,使用循环来逐个比较这些数,找到最大值和最小值,并将其保存在内存中。最后,输出最大值和最小值。
下面是一个简单的实现:
```
; 定义常量
MAX_NUMS EQU 10 ; 数组大小
DATA_START EQU 1000h ; 数据存储起始地址
; 定义数据段
.DATA
nums DB MAX_NUMS DUP(?) ; 存储无符号数的数组
; 定义代码段
.CODE
MAIN PROC
; 读入无符号数
MOV CX, MAX_NUMS ; CX 存储循环计数器
MOV SI, DATA_START ; SI 存储当前数据存储地址
READ_LOOP:
MOV AH, 01h ; 读入一个字符
INT 21h
SUB AL, '0' ; 将字符转换为数字
MOV [SI], AL ; 存储数字到内存中
INC SI ; 增加存储地址
LOOP READ_LOOP ; 继续读取下一个数字
; 比较无符号数,找出最大值和最小值
MOV CX, MAX_NUMS ; CX 存储循环计数器
MOV AX, [DATA_START] ; AX 存储当前最大值
MOV BX, [DATA_START] ; BX 存储当前最小值
COMP_LOOP:
CMP AX, [SI] ; 比较当前值和最大值
JAE MAX_CHECK ; 如果大于等于最大值,则跳转到 MAX_CHECK
MOV AX, [SI] ; 更新最大值
JMP MIN_CHECK ; 跳转到 MIN_CHECK
MAX_CHECK:
CMP BX, [SI] ; 比较当前值和最小值
JBE MIN_CHECK ; 如果小于等于最小值,则跳转到 MIN_CHECK
MOV BX, [SI] ; 更新最小值
MIN_CHECK:
ADD SI, 1 ; 增加存储地址
LOOP COMP_LOOP ; 继续比较下一个数字
; 输出最大值和最小值
MOV DL, 'M' ; 输出 "Max: "
MOV AH, 02h
INT 21h
MOV DL, '0' ; 输出最大值的十进制表示
ADD DL, AH
MOV AH, 02h
INT 21h
MOV DL, ' '
MOV AH, 02h
INT 21h
MOV DL, 'M'
MOV AH, 02h
INT 21h
MOV DL, 'i'
MOV AH, 02h
INT 21h
MOV DL, 'n'
MOV AH, 02h
INT 21h
MOV DL, ':'
MOV AH, 02h
INT 21h
MOV DL, ' '
MOV AH, 02h
INT 21h
MOV DL, '0' ; 输出最小值的十进制表示
ADD DL, AH
MOV AH, 02h
INT 21h
MOV DL, ' '
MOV AH, 02h
INT 21h
; 退出程序
MOV AH, 4Ch
INT 21h
MAIN ENDP
END MAIN
```
这个程序首先读入10个无符号数,并将它们保存在内存中。然后使用循环来比较这些数,找出最大值和最小值。最后,输出最大值和最小值,并退出程序。
阅读全文