汇编语言求最大值,最小值,平均值
时间: 2023-11-28 20:36:01 浏览: 398
汇编语言 求最大值最小值
以下是汇编语言实现求最大值、最小值和平均值的示例代码:
; 求最大值
section .data
data1 db 10, 20, 30, 40, 50
max db 0
section .text
global _start
_start:
mov al, [data1] ; 将第一个数存入 al 中
mov bl, al ; 让 bl 初始值等于 al
loop_start:
cmp al, [data1 + 1] ; 比较 al 和下一个数的大小
jle not_greater ; 如果 al 不大于下一个数,跳过赋值操作
mov al, [data1 + 1] ; 将下一个数赋值给 al
not_greater:
inc byte [data1] ; 将 data1 的地址加 1,指向下一个数
cmp byte [data1], 50 ; 如果 data1 指向的地址已经是最后一个数,跳出循环
jne loop_start
mov [max], al ; 将最大值存入 max 中
; 求最小值
section .data
data2 db 30, 40, 10, 20, 50
min db 0
section .text
global _start
_start:
mov al, [data2] ; 将第一个数存入 al 中
mov bl, al ; 让 bl 初始值等于 al
loop_start:
cmp al, [data2 + 1] ; 比较 al 和下一个数的大小
jge not_less ; 如果 al 不小于下一个数,跳过赋值操作
mov al, [data2 + 1] ; 将下一个数赋值给 al
not_less:
inc byte [data2] ; 将 data2 的地址加 1,指向下一个数
cmp byte [data2], 50 ; 如果 data2 指向的地址已经是最后一个数,跳出循环
jne loop_start
mov [min], al ; 将最小值存入 min 中
; 求平均值
section .data
data3 db 10, 20, 30, 40, 50
sum dw 0
count dw 5
average dw 0
section .text
global _start
_start:
mov cx, [count] ; 将 count 存入 cx 中,表示循环次数
mov si, 0 ; 将 si 置为 0,表示数组下标从 0 开始
loop_start:
mov al, [data3 + si] ; 将 data3[si] 存入 al 中
add [sum], ax ; 将 al 的值加入 sum 中
inc si ; 将 si 加 1,指向下一个数
loop loop_start ; 循环 count 次
mov bx, [count] ; 将 count 存入 bx 中
mov ax, [sum] ; 将 sum 存入 ax 中
cwd ; 将 ax 扩展到 dx:ax
div bx ; 将 ax 除以 bx,商存于 ax,余数存于 dx
mov [average], ax ; 将平均值存入 average 中
上述代码的实现原理是:
- 求最大值:依次比较数组中相邻两个数的大小,将较大的数存入 al 中,最后将 al 的值存入 max 中,即为最大值。
- 求最小值:依次比较数组中相邻两个数的大小,将较小的数存入 al 中,最后将 al 的值存入 min 中,即为最小值。
- 求平均值:将数组中所有数的和存入 sum 中,再将 sum 除以数组长度,商即为平均值。
阅读全文