1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
   | ; 将每年信息按如下格式填充到table段: ; 年份         收入       雇员      人均收入 ; 4B   空格    4B   空格  2B  空格  2B      空格 (共16字节) ; '1975'      16         3        ?? ; 计算21年的人均收入
  assume cs:code data segment     ; 21个 4字节 年份     db '1975','1976','1977','1978','1979','1980','1981','1982','1983','1984'     db '1985','1986','1987','1988','1989','1990','1991','1992','1993','1994','1995'
      ; 21个 4字节 双字 年收入     dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514     dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
      ; 21个 2字节 字 雇员数     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     ; 每行长16字节     db 21 dup ('year summ ne ?? ') table ends
  code segment start:     mov ax,data     mov ds,ax ; 数据段地址
      mov ax,table     mov ss,ax ; table段地址     mov bp,0
      mov cx,21 ; 循环21次
  s:     mov bx,0  ; 数据段偏移     mov si,21 ; 根据当前循环计算位置     sub si,cx ; 计算21个数据中所处位置     add si,si ; 字的偏移要x2
      mov di,si ; 计算双字偏移量     add di,di ; 双字要x4
      mov ax,[bx+di]   ; 年份前2字符     mov [bp],ax     add bp,2     mov ax,[bx+di+2] ; 年份后2字符     mov [bp],ax     add bp,2     mov byte ptr [bp],' '     inc bp
      add bx,84     mov ax,[bx+di]      ; 收入低字     mov [bp],ax     add bp,2     mov dx,[bx+di+2]    ; 收入高16位,ax里存放32位除法的商     mov [bp],dx     add bp,2     mov byte ptr [bp],' '     inc bp
      add bx,84     div word ptr [bx+si] ; 年收入除以雇员,ax里有商,是人均收入     mov dx,[bx+si]   ; 雇员     mov [bp],dx     add bp,2     mov byte ptr [bp],' '     inc bp     mov [bp],ax      ; 人均收入     add bp,2     mov byte ptr [bp],' '     inc bp     loop s
      mov ax,4c00h     int 21h code ends end start
   |