汇编语言求最大值最小值平均值
时间: 2024-06-02 11:06:11 浏览: 145
汇编语言 求最大值最小值
汇编语言是一种低级编程语言,它直接操作计算机硬件。下面是求最大值、最小值和平均值的示例程序:
```
data segment
arr db 30h, 25h, 40h, 10h, 35h ;数据数组
n dw 5 ;数据个数
max db 0 ;最大值
min db 0 ;最小值
sum dw 0 ;总和
avg dw 0 ;平均值
data ends
code segment
start:
mov ax, data
mov ds, ax
;求最大值
mov bl, arr
mov bh, bl
mov cx, n
max_loop:
cmp [bl], [bh]
jg max_update
inc bl
jmp max_check_end
max_update:
mov bh, bl
max_check_end:
inc bl
loop max_loop
mov max, [bh]
;求最小值
mov bl, arr
mov bh, bl
mov cx, n
min_loop:
cmp [bl], [bh]
jl min_update
inc bl
jmp min_check_end
min_update:
mov bh, bl
min_check_end:
inc bl
loop min_loop
mov min, [bh]
;求平均值
mov bx, arr
mov cx, n
sum_loop:
add ax, [bx]
inc bx
loop sum_loop
mov sum, ax
mov ax, sum
cwd ;扩展符号位,用于除法计算,将AX转换为DX:AX
idiv n ;除以n,商在AX,余数在DX
mov avg, ax
;显示结果
mov ah, 09h ;DOS功能号,显示字符串
lea dx, max_msg ;最大值字符串地址
int 21h ;调用DOS中断,显示字符串
mov al, max ;将最大值转换为ASCII码,方便显示
add al, 30h ;转换为ASCII码的方式是加上'0'
mov ah, 0Eh ;DOS功能号,显示字符
int 10h ;调用BIOS中断,显示字符
lea dx, min_msg ;最小值字符串地址
int 21h ;调用DOS中断,显示字符串
mov al, min ;将最小值转换为ASCII码,方便显示
add al, 30h ;转换为ASCII码的方式是加上'0'
mov ah, 0Eh ;DOS功能号,显示字符
int 10h ;调用BIOS中断,显示字符
lea dx, avg_msg ;平均值字符串地址
int 21h ;调用DOS中断,显示字符串
mov ax, avg ;将平均值转换为ASCII码,方便显示
call print_word ;调用子程序,显示16位数值
exit:
mov ah, 4Ch ;DOS功能号,程序结束退出
int 21h ;调用DOS中断,程序结束退出
print_word proc near ;子程序,显示16位数值,入口参数:AX=数值(十进制)
push ax ;保存寄存器内容
push dx
mov bx, 10d ;除数为10d
mov cx, 0 ;数字长度初始化为0
L1:
xor dx, dx ;清零DX寄存器
div bx ;AX=AX/BX,商在AL,余数在AH
push dx ;保存余数
inc cx ;数字长度+1
test ax, ax ;判断是否还能继续除法运算
jnz L1
L2:
pop dx ;弹出余数
add dl, '0' ;转换为ASCII码
mov ah, 02h ;DOS功能号,显示字符
int 21h ;调用DOS中断,显示字符
loop L2
pop dx ;恢复寄存器内容
pop ax
ret
print_word endp
max_msg db 'The maximum value is: '
min_msg db 'The minimum value is: '
avg_msg db 'The average value is: $'
code ends
end start
```
阅读全文