欢迎访问 生活随笔!

凯发k8官方网

当前位置: 凯发k8官方网 > 编程资源 > 编程问答 >内容正文

编程问答

汇编原理实验 -凯发k8官方网

发布时间:2024/10/14 编程问答 4 豆豆
凯发k8官方网 收集整理的这篇文章主要介绍了 汇编原理实验 --计算平均数 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

先不考虑用户输入以及输出,我们可以根据一些总结来的经验得出:在处理数组累加,以及求平均值的程序中需要用到循环,把用户输入的数字加起来,然后除以一个总数得到平均值。

了解了核心算法后,开始需要处理一些汇编细节,和其他高级语言不同,在汇编语言中用户输入的数字其实是字符,用ascii保存的。例如用户输入18,实际上是输入’1’.’8’,对应的ascii,31h,38h,如果想要进行运算,首先要把用户输入的’数字’转化为真正的数字才行,也就有了我们changetonum子程序。具体实现思想比较简单,用户输入一串数字后,我们从数字最高位开始读,然后把读出来的存于dx,然后将ascii转化成数字只要减去30h即可,存于ax。再读次高位,用相同方法处理成数字,然后ax10后再加上dx,反复如此,直到所有读完。

输出也是类似的,要把数字输出在屏幕上,需要把每位数字转化成ascii码输出,每次循环整除以10,余数就是最低位,直到除到商为0。这就是 dispdec子程序

有了这三大块功能后,就可以来实现代码了:

定义一个sum变量来记录累加,用户每输入一个数字转化后就加到sum中,输入完成后sum再除以整数得平均数。最后将其输出


datas segment;此处输入数据段代码message db 'average is:$'sum dw 0count equ 5 ;数字个数num db 3 ;最多两位数numlen db ?numfld db 3 dup(?) datas endsstacks segment;此处输入堆栈段代码 stacks endscodes segmentassume cs:codes,ds:datas,ss:stacks start:mov ax,datasmov ds,ax;此处输入代码段代码mov bx,summov cx,count again:mov ah,0ahlea dx,numint 21hcall printnewlinecall changetonum ;入口numfld出口参数为axadd bx,axloop againlea dx,messagecall printmov sum,bxmov ax,summov bx,countdiv bxmov dx ,axcall dispdecmov ah,4chint 21hprint procpush axmov ah,09hint 21hpop axret print endp ;输出换行 printnewline procpush axpush dxmov ah,02hmov dl,0dhint 21hmov dl,0ahint 21hpop dxpop axret printnewline endp changetonum proc push cx push dx push bxmov cl,numlenmov si,0mov ax,0 again1: mov dl,[numfld si]sub dl,30hinc siadd ax,dxcmp cl,1je last mov bl,10 mul blloop again1 last: pop bx pop dx pop cxret changetonum endp ;十进制输出,入口参数dx dispdec procpush axpush bxpush cxpush dxmov ax,dxxor dx,dxmov bx,10mov cx,0 a:cmp ax,10jb okdiv bxadd dl,30hpush dxxor dx,dxinc cxjmp a ok:add al,30hpush axinc cx b:pop dxmov ah,2int 21hloop bpop dxpop cxpop bxpop axret dispdec endp codes endsend start

运行结果如图:


与50位技术专家面对面20年技术见证,附赠技术全景图

总结

以上是凯发k8官方网为你收集整理的汇编原理实验 --计算平均数的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发k8官方网网站内容还不错,欢迎将凯发k8官方网推荐给好友。

网站地图