assume cs:codesg,ds:data,es:table
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个字符串
; 空间大小:21 *4 = 84
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 * 4 = 84
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,4635,8226
dw 11542,14430,15257,17800
; 21年历年的总人工
; 空间大小:21 * 2 = 42
data ends
table segment
db 21 dup ('year summ ne ?? ')
; 21行的table
; 将上面数据按下面格式填入:空白表示一个字节
; 年份(四字节) 收入(四字节) 员工(两字节) 人均收入(两字节) 空格
table ends
codesg segment
start: mov ax,data
mov ds,ax
mov bx,0
mov si,0
mov di,0
mov ax,table
mov es,ax ; 表格
mov cx,21
s0: mov ax,ds:[si]
mov word ptr es:[bx],ax ; bx 当前行
mov ax,ds:[si+2]
mov word ptr es:[bx+2],ax ; 年份
mov ax,ds:[si+84] ; 偏移到收入
mov word ptr es:[bx+5],ax
mov dx,ds:[si+86]
mov word ptr es:[bx+7],dx ; 收入
div word ptr ds:[di+168] ; 偏移到人工
mov word ptr es:[bx+13],ax ; 平均
mov ax,ds:[di+168]
mov word ptr es:[bx+10],ax ; 员工
add bx,16 ; 下一行
add si,4 ; 每次循环处理4个字节,年份、收入
add di,2 ; 每次循环处理2个字节,人工
loop s0
mov ax,4c00h
int 21h
codesg ends
end start