直接看注释应该没问题:
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