使用8086/8088汇编语言编写程序
1、程序如下:
codesegment
assumecs:code,ds:code,ss:code
org100h
main:movsi,offsetx;取数组中第一个元素的内存地址
movcx,100;数组元素个数
cld;以下使用lodsb来获得各元素值,为此先清除方向标志
xorah,ah;因x内全部为无符号数,所以将ah设为0,以便累加(根据_fmlyht意见从循环内移出以提高代码效率)
lab1:lodsb;从ds:si处取一个字节放入al中,同时si增1即指向下个元素
addsum,ax;累加
looplab1;循环,前面对cx的赋值规定了循环次数为100次
int20h;循环结束后sum中为总和,此处用int20h退出
xdb100dup(?);定义100个字节型元素的数组,但不指定初值
sumdw0;sum的初值为0,在程序代码部分中没有对该变量进行初始化,所以会使用这里定义的值为总和的初值
codeends
endmain
2、代码如下:
cmpax,bx;比较ax与bx
jgelab2;若ax>=bx则转至lab2,带符号数比较须使用jg(e)/jl(e)/jng/jnl等指令
xchgax,bx;根据_fmlyht意见,将ax与bx交换,如此,ax中为两者的较大值,bx为较小值
lab2:cmpax,cx;执行到此时,ax中有最初时ax与bx中较大者,这时再比较ax与cx
jgelab3;方法与前次类似,至lab3时ax将存有原来三者中最大的数
xchgax,cx;没有跳转的话需将cx中较大的值与ax中较小的值交换以使ax中含最大值
lab3:
;至此ax中已是三者中的最大值,下面代码是为完成中间值与最小值的排序,使三者从大到小分别存放于ax、bx、cx。原题无此要求,可去掉。
cmpbx,cx
jgelab4
xchgbx,cx
lab4:
;至此,ax>=bx>=cx
----
谢谢楼下_fmlyht朋友指正,已在此答案中改进并注明。
免责声明:本站发布的教育资讯(图片、视频和文字)以本站原创、转载和分享为主,文章观点不代表本网站立场。
如果本文侵犯了您的权益,请联系底部站长邮箱进行举报反馈,一经查实,我们将在第一时间处理,感谢您对本站的关注!
新励学网教育平台
海量全面 · 详细解读 · 快捷可靠
累积科普文章数:18,862,126篇