已知在 DATA 开始的字单元中存放有 10 个无符号整数,试编制程序挑选出其 中的最大值和最小值并显示。汇编语言
时间: 2024-05-24 16:10:35 浏览: 103
assume cs:code, ds:data
data segment
nums dw 2, 7, 6, 4, 8, 1, 9, 3, 5, 0
max dw ?
min dw ?
data ends
code segment
start:
mov ax, data
mov ds, ax ; 设置数据段寄存器
; 初始化最大值和最小值
mov ax, nums
mov max, ax
mov min, ax
; 扫描数组
mov cx, 9 ; 有10个数,循环9次
mov si, 2 ; 数组下标从2开始
scan_loop:
mov ax, nums[si] ; 取出当前数
cmp ax, max ; 比较是否大于最大值
jg update_max ; 如果是,更新最大值
cmp ax, min ; 比较是否小于最小值
jl update_min ; 如果是,更新最小值
jmp next_num ; 处理下一个数
update_max:
mov max, ax ; 更新最大值
jmp next_num ; 处理下一个数
update_min:
mov min, ax ; 更新最小值
next_num:
add si, 2 ; 下一个数的下标
loop scan_loop ; 循环处理下一个数
; 显示结果
mov ah, 9h ; 调用DOS中断显示字符串
lea dx, max_msg ; 加载最大值的提示字符串
int 21h
mov ax, max
call print_num ; 显示最大值
mov ah, 9h ; 调用DOS中断显示字符串
lea dx, min_msg ; 加载最小值的提示字符串
int 21h
mov ax, min
call print_num ; 显示最小值
mov ah, 4ch ; 调用DOS中断结束程序
int 21h
print_num proc near ; 显示一个16位无符号整数
push ax ; 保存寄存器
push bx
push cx
push dx
mov cx, 4 ; 循环4次
mov bx, 1000h ; 商
print_loop:
xor dx, dx ; 清零余数
div bx ; 将数除以1000,得到商和余数
add dl, 30h ; 将余数转换为字符
mov ah, 2h ; 调用DOS中断显示字符
int 21h
dec cx ; 循环计数器减1
jnz print_loop ; 如果循环未结束,继续处理
pop dx ; 恢复寄存器
pop cx
pop bx
pop ax
ret
print_num endp
max_msg db 'Max: '
min_msg db 'Min: '
code ends
end start
阅读全文