当前位置:新励学网 > 秒知问答 > 使用8086/8088汇编语言编写程序

使用8086/8088汇编语言编写程序

发表时间:2024-07-27 15:56:33 来源:网友投稿

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朋友指正,已在此答案中改进并注明。

免责声明:本站发布的教育资讯(图片、视频和文字)以本站原创、转载和分享为主,文章观点不代表本网站立场。

如果本文侵犯了您的权益,请联系底部站长邮箱进行举报反馈,一经查实,我们将在第一时间处理,感谢您对本站的关注!