8086汇编 写一个计算平均数的小程序 ,按照下面给出的格式写入table中,并计算21年中人均收入(取整)

8086汇编 写一个计算平均数的小程序 ,按照下面给出的格式写入table中,并计算21年中人均收入(取整),第1张

assume cs:codesg,ds:data,es:table,ss:stacks

data segment

db '1975','1976','1977','1978','1979','1980','1981','1982','1983'

db '1984','1985','1986','1987','1988','1989','1990','1991','1992'

db '1993','1994','1995'

以上是表示21年的21个字符串

dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514

dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000

以上是表示21年公司总收的21个dword型数据

dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226

dw 11542,14430,45257,17800

以上是表示21年公司雇员人数的21个word型数据

data ends

table segment

db 21 dup('year summ ne ?? ')

table ends

stacks segment

db 0,0,0,0

stacks ends                                                                                                                         

codesg segment

mov ax,data

mov ds,ax

mov ax,stacks

mov ss,ax

mov sp,8

mov bx,0

mov ax,table

mov es,ax

mov cx,21

mov si,0

mov di,0

mov dx,0

s:

以下传递年份

mov ax,ds:[si]

mov es:[di],ax

mov ax,ds:[si+2]

mov es:[di+2],ax

以下传递收入

mov ax,ds:[si+84]

mov es:[di+5],ax   ax是低八位

mov dx,ds:[si+86] 

mov es:[di+7],dx   dx是高八位

push cx

以下传递雇员数

mov cx,ds:[bx+168]

mov es:[di+0ah],cx

mov cx,es:[di+0ah]

div cx   计算人均收入

mov es:[di+0dh],ax

add di,10h

add bx,2

add si,4

pop cx

loop s

mov ax,4c00h

int 21h

codesg ends

end

1、程序如下:

codesegment

assume cs:code, ds:code, ss:code

org 100h

main: mov si,offset x 取数组中第一个元素的内存地址

mov cx,100 数组元素个数

cld 以下使用lodsb来获得各元素值,为此先清除方向标志

xor ah,ah 因x内全部为无符号数,所以将ah设为0,以便累加(根据 _fmlyht 意见从循环内移出以提高代码效率)

lab1: lodsb 从ds:si处取一个字节放入al中,同时si增1即指向下个元素

add sum,ax 累加

looplab1循环,前面对cx的赋值规定了循环次数为100次

int 20h 循环结束后sum中为总和,此处用int 20h退出

x db 100 dup (?) 定义100个字节型元素的数组,但不指定初值

sum dw 0 sum的初值为0,在程序代码部分中没有对该变量进行初始化,所以会使用这里定义的值为总和的初值

codeends

end main

2、代码如下:

cmp ax,bx 比较ax与bx

jge lab2若ax>=bx则转至lab2,带符号数比较须使用jg(e)/jl(e)/jng/jnl等指令

xchg ax,bx 根据 _fmlyht 意见,将ax与bx交换,如此,ax中为两者的较大值,bx为较小值

lab2: cmp ax,cx 执行到此时,ax中有最初时ax与bx中较大者,这时再比较ax与cx

jge lab3方法与前次类似,至lab3时ax将存有原来三者中最大的数

xchg ax,cx 没有跳转的话需将cx中较大的值与ax中较小的值交换以使ax中含最大值

lab3:

至此ax中已是三者中的最大值,下面代码是为完成中间值与最小值的排序,使三者从大到小分别存放于ax、bx、cx。原题无此要求,可去掉。

cmp bx,cx

jge lab4

xchg bx,cx

lab4:

至此,ax>=bx>=cx

----

谢谢楼下 _fmlyht 朋友指正,已在此答案中改进并注明。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11448420.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存