使用8086汇编语言实现已知在 DATA 开始的字单元中存放有 10 个无符号整数,试编制程序挑选出其 中的最大值和最小值并显示。
时间: 2024-05-08 08:17:53 浏览: 124
利用汇编语言编写找出10个无符号数中最大数和最小数分别存储程序.doc
以下是使用8086汇编语言实现挑选最大值和最小值的程序:
```
; 8086汇编语言程序,挑选最大值和最小值
DATA SEGMENT
NUMBERS DB 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 ; 10个无符号整数
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
MAIN PROC
MOV AX, DATA ; 将数据段地址放入 AX 中
MOV DS, AX ; 将数据段地址放入 DS 中
MOV BL, NUMBERS ; 将第一个数的地址放入 BL 中
MOV CL, 9 ; CL 计数器,用于循环比较
MOV AL, [BL] ; 将第一个数赋值给 AL,作为最小值
MOV AH, [BL] ; 将第一个数赋值给 AH,作为最大值
COMPARE_LOOP:
INC BL ; BL 指针加 1,指向下一个数
CMP AL, [BL] ; 比较当前 AL 和 BL 指向的数的大小
JNB NOT_SMALLER ; 如果 AL 不比 BL 指向的数小,跳转到 NOT_SMALLER
MOV AL, [BL] ; 如果 AL 比 BL 指向的数小,将 BL 指向的数赋值给 AL,作为新的最小值
NOT_SMALLER:
CMP AH, [BL] ; 比较当前 AH 和 BL 指向的数的大小
JNA NOT_BIGGER ; 如果 AH 不比 BL 指向的数大,跳转到 NOT_BIGGER
MOV AH, [BL] ; 如果 AH 比 BL 指向的数大,将 BL 指向的数赋值给 AH,作为新的最大值
NOT_BIGGER:
LOOP COMPARE_LOOP ; 循环比较,直到比较完所有数
; 显示最大值和最小值
MOV DL, AH ; 将最大值放入 DL 中
ADD DL, 30H ; 转换为 ASCII 码
MOV AH, 02H ; 设置输出字符函数号
INT 21H ; 输出最大值字符
MOV DL, ',' ; 输出逗号分隔符
MOV AH, 02H ; 设置输出字符函数号
INT 21H ; 输出逗号分隔符
MOV DL, AL ; 将最小值放入 DL 中
ADD DL, 30H ; 转换为 ASCII 码
MOV AH, 02H ; 设置输出字符函数号
INT 21H ; 输出最小值字符
MOV AH, 4CH ; 设置退出程序函数号
INT 21H ; 退出程序
MAIN ENDP
CODE ENDS
END MAIN
```
该程序使用 DATA 段存储了 10 个无符号整数,使用 CODE 段实现了挑选最大值和最小值的功能,并将最大值和最小值输出到屏幕上。
阅读全文