|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
assume cs:codesg,ss:stack,ds:data
data segment
db '1975','1976','1977','1978','1979','1980','1981'
db '1982','1983','1984','1985','1986','1987','1988'
db '1989','1990','1991','1992','1993','1994','1995'
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479
dd 140417,197514,345980,590827,803530,1183000,1843000
dd 2759000,3753000,4649000,5937000
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258
dw 2793,4037,5635,8226,11542,14430,15257,17800
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
table segment
db 21 dup ('year summ ne ?? ')
table ends
codesg segment
start: mov ax, data
mov ds, ax ;数据段寄存器
mov ax, table
mov es, ax ;table段寄存器
mov ax, stack
mov ss, ax
mov sp, 16 ;设置桟段指针
mov bx, 0 ;bx为年份指针,初始时指向年份起始地址
mov bp, 0 ;bp为table段基址寄存器
mov si, 84 ;si是收入指针,初始时指向收入起始地址
mov di, 168 ;di是人数指针,初始时指向人数起始地址
mov cx, 21 ;cx中存放循环次数
s: push cx ;计数值压栈
mov ax, [bx]
mov es:[bp], ax
add bx, 2
mov ax, [bx]
mov es:[bp+2], ax ;处理年份
add bx, 2
mov ax, [si] ;这里特意让收入的低8位通过ax传送,是为了后面算平均收入作准备
mov es:[bp+5], ax
add si, 2
mov dx, [si] ;这里特意让收入的高8位通过dx传送,是为了后面算平均收入作准备
mov es:[bp+7], dx ;搬移收入
add si, 2
mov cx, [di] ;人数通过cx传送,也是为后面算平均收入作准备
mov es:[bp+10], cx ;搬移人数部分
add di, 2
div cx ;前面准备工作都做好了,只要div cx就算出了平均收入
mov es:[bp+13], ax ;把商送入指定单元
add bp, 16 ;处理下一个年份的内容
pop cx ;计数数值出栈到cx中
loop s
mov ax, 4c00h
int 21h
codesg ends
end start |
|