汇编语言求平均值代码_计算一列数字的平均值

65c28b194b48b05733d288777969c4f5.png

考虑一下下面的的问题:

你有一列浮点类型的数字。这绝不是令人讨厌的恶作剧----没有无穷个数字或无限大的数字,仅仅只是正常的“简单的”浮点型的数字。
现在:计算其平均值。你能做到吗?

事实证明这是一个很困难的问题,想要得到该平

使用Hypothesis库来考虑以下的测试案列:

eb87d982110d03e79d4021a7de5a10bf.png

这并不是关于正确性的测试,只是测试平均值是否在列表的合理的限制范围内:在不作为平均值的情况下,有许多函数可以满足这个要求。最小值和最大值函数都满足这个要求,中值函数也是如此。

然而,几乎没有人的平均值计算方法满足这个要求。

为了理解其中的原因,写下了我们自己的平均值计算方法:febf0fea77021a7bf894c8065ae0950e.png

这看起来十分合理--它正是平均值的定义--但是&#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
汇编语言是一种低级编程语言,它直接操作计算机硬件。下面是求最大值、最小值和平均值的示例程序: ``` 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 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值