assume cs:code,ds:data data segment DB '1975', '1976', '1977', '1978', '1979', '1980', '1981', '1982' DB '1983', '1984', '1985', '1986', '1987', '1988', '1989', '1990' DB '1991', '1992', '1993', '1994', '1995' DD 16, 22, 382, 1356, 2390, 8000, 16000, 24486, 50065, 97479, 140417, 197514 DD 345980, 590827, 803530, 118300, 184300, 2759000, 3753000, 4649000, 5937000 DW 3, 7, 9, 13, 28, 38, 130, 220, 476, 778, 1001, 1442, 2258, 2793, 4037, 5635, 8226 DW 11542, 14430, 15257, 17800 data ends table segment DB 21 dup ('year summ ne ?? ') table ends code segment start: comment* si si+4 si+8 si 年份1 年份2 年份3 ... si+84 si+84+4 si+84+8 收入1 收入2 收入3 ... si+168 si+168+2 si+168+4 人数1 人数2 人数3 ... di di+4 di+5 di+9 di+10 di+12 di+13 di+15 di 年份1 空格 收入1 空格 人数1 空格 人均1 空格 di+16 di+16+4 di+16+5 di+16+9 di+16+10 di+16+12 di+16+13 di+16+15 年份2 空格 收入2 空格 人数2 空格 人均2 空格 di+32 di+32+4 di+32+5 di+32+9 di+32+10 di+32+12 di+32+13 di+32+15 年份3 空格 收入3 空格 人数3 空格 人均3 空格 ... 第一次循环 年份 si -> di 收入 si+84 -> di+5 人数 si+168 -> di+10 第二次循环 年份 si+4 -> di+16 收入 si+84+4 -> di+16+5 人数 si+168+2 -> di+16+10 第三次循环 年份 si+8 -> di+32 收入 si+84+8 -> di+32+5 人数 si+168+4 -> di+32+10 ... 注意: 【年份】和【收入】占4个字节,每次加4,【人数】占两个字节, 每次加2. *comment mov ax, data mov ds, ax mov ax, table mov es, ax mov ax, 0 mov bx, 0 mov di, 0 mov si, 0 mov bp, 0 mov cx, 21 begin_copy: mov ax, [si] mov es:[di], ax mov ax, [si+2] mov es:[di+2], ax mov byte ptr es:[di+4], 20h ;空格 mov ax, [si+84] mov es:[di+5], ax mov ax, [si+86] mov es:[di+7], ax mov byte ptr es:[di+9], 20h ;空格 mov ax, ds:[bp+168] ; !!!使用bp, 必须指定寄存器 !!! mov es:[di+0Ah], ax mov byte ptr es:[di+0Ch], 20h ;空格 mov ax, [si+84] mov dx, [si+86] mov bx, es:[di+0Ah] div bx mov word ptr es:[di+0Dh], ax mov byte ptr es:[di+0Fh], 20h ;空格 add di, 16 add si, 4 add bp, 2 loop begin_copy mov ax, 4c00h int 21h code ends end start