已知在 DATA 开始的字单元中存放有 10 个无符号整数,试编制程序挑选出其 中的最大值和最小值并显示。利用汇编语言编写
时间: 2024-05-03 07:21:39 浏览: 11
以下是汇编语言代码:
```
org 100h
section .data
numbers db 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
section .text
global _start
_start:
; 初始化最大值和最小值为第一个数
mov al, [numbers]
mov bl, [numbers]
; 循环遍历数组,查找最大值和最小值
mov cx, 9 ; 10个数,循环9次
mov si, 1 ; 数组下标从1开始
loop_start:
mov dl, [numbers + si] ; 取出当前数
cmp dl, al ; 如果当前数大于最大值
ja set_max ; 将当前数设置为最大值
cmp dl, bl ; 如果当前数小于最小值
jb set_min ; 将当前数设置为最小值
inc si ; 下一个数
loop loop_start ; 循环遍历
; 显示最大值和最小值
mov ah, 09h ; DOS中断号,显示字符串
mov dx, max_msg ; 最大值的提示信息
int 21h ; 调用DOS中断
mov dl, al ; 最大值的ASCII码
add dl, '0' ; 转换为字符
mov ah, 02h ; DOS中断号,显示单个字符
int 21h ; 调用DOS中断
mov ah, 09h ; DOS中断号,显示字符串
mov dx, min_msg ; 最小值的提示信息
int 21h ; 调用DOS中断
mov dl, bl ; 最小值的ASCII码
add dl, '0' ; 转换为字符
mov ah, 02h ; DOS中断号,显示单个字符
int 21h ; 调用DOS中断
; 退出程序
mov ah, 4Ch ; DOS中断号,退出程序
mov al, 0 ; 返回给DOS的退出码
int 21h ; 调用DOS中断
set_max:
mov al, dl ; 将当前数设置为最大值
jmp loop_start ; 继续循环
set_min:
mov bl, dl ; 将当前数设置为最小值
jmp loop_start ; 继续循环
max_msg db 'Max: '
min_msg db 'Min: '
```
代码解释:
1. 定义了一个数组 `numbers` 存放 10 个无符号整数。
2. 使用 `mov` 指令将第一个数作为最大值和最小值的初始值。
3. 使用 `mov` 指令将循环计数器 `cx` 设置为 9,并将数组下标 `si` 设置为 1。
4. 进入循环,使用 `mov` 指令取出当前数,使用 `cmp` 指令分别比较当前数和最大值、最小值。
5. 如果当前数比最大值大,使用 `ja` 指令跳转到 `set_max` 标签,将当前数设置为最大值。
6. 如果当前数比最小值小,使用 `jb` 指令跳转到 `set_min` 标签,将当前数设置为最小值。
7. 使用 `inc` 指令将数组下标 `si` 加 1,使用 `loop` 指令判断循环是否结束,如果循环次数还没达到 10,就跳转到 `loop_start` 标签,继续循环。
8. 如果循环次数已达到 10,就跳出循环。
9. 使用 DOS 中断号 09h 显示最大值的提示信息,使用 `mov` 指令将最大值的 ASCII 码存入 `dl` 中,使用 `add` 指令将 `dl` 加上字符 `'0'` 的 ASCII 码,转换为字符,使用 DOS 中断号 02h 显示单个字符。
10. 使用 DOS 中断号 09h 显示最小值的提示信息,使用 `mov` 指令将最小值的 ASCII 码存入 `dl` 中,使用 `add` 指令将 `dl` 加上字符 `'0'` 的 ASCII 码,转换为字符,使用 DOS 中断号 02h 显示单个字符。
11. 使用 DOS 中断号 4Ch 退出程序。