直接看注释应该没问题:
assume cs:codesg,ds:data,es:table
;书上的数据太多,我这里只弄了6组数据,不影响程序的运行
data segment
db '1975','1976','1977','1978','1979','1980'
dd 120,1522,12457,152487,965000,999999
dw 2,10,19,500,7850,12000
data ends
table segment
db 6 dup ('year summ em ?? ')
table ends
codesg segment
start: mov ax,data
mov ds,ax
mov ax,table
mov es,ax
mov bx,0 ;定义第一和第二组数据的递增量,因为他们的数据都是占用4个字节
mov di,0 ;定义第三个数据的递增量
mov si,0 ;定义table的递增量
mov cx,6
s: mov al,[bx] ;添加年份
mov es:[si],al
mov al,[bx+1]
mov es:[si+1],al
mov al,[bx+2]
mov es:[si+2],al
mov al,[bx+3]
mov es:[si+3],al
mov ax,[bx+24] ;添加收入,24是6个数据乘一个数据占4个字节算得
mov es:[si+5],ax
mov ax,[bx+24+2]
mov es:[si+5+2],ax
mov ax,[di+48] ;添加雇员,48是前面两组数据占的字节数。
mov es:[si+10],ax
mov dx,[bx+24+2] ;计算人均收入
mov ax,[bx+24]
div word ptr [di+48]
mov es:[si+13],ax
add bx,4 ;增加偏移量
add di,2
add si,16
loop s
mov ax,4c00h
int 21h
codesg ends
end start