assume cs:code,ds:data buf segment db 0a0H dup (' '),0 buf ends data segment db '1975','1976','1977','1978','1979','1980','1981','1982','1983','1984' db '1985','1986','1987','1988','1989','1990','1991','1992','1993','1994' db '1995' ;以上表示21年的21个字符串 dd 16,22,382,1356,2390,8000,16000,24486,50065,97479 dd 140417,197514,345980,590827,803530,1183000,1843000,2759000,3753000,4649000 dd 5937000 ;以上表示21年公司总收入的21个dword型数据 dw 3,7,9,13,28,38,130,220,476,778 dw 1001,1442,2258,2793,4037,5635,8226,11542,14430,15257 dw 17800 ;以上是表示21年公司雇员人数的21个word型数据 data ends table segment db 21 dup ('year summ ne ?? '),0 table ends code segment main: mov ax,table mov ds,ax mov ax,data mov es,ax mov si,0 mov di,0 call copy mov ax,buf mov ds,ax mov ax,table mov es,ax mov bl,2 mov cx,21 s2: mov ax,es:[di] mov [si],ax mov ax,es:[di+2] mov [si+2],ax mov al,es:[di+4] mov [si+4],al mov ax,es:[di+5] mov dx,es:[di+7] add si,5 call dtoc mov ax,es:[di+10] xor dx,dx add si,11 call dtoc mov ax,es:[di+13] xor dx,dx add si,6 call dtoc xor si,si mov dh,bl mov dl,2 push cx mov cl,2 add di,10H call show_str pop cx inc bl loop s2 mov ax,4c00H int 21H copy: push ax push bx push cx push dx push si push di xor bx,bx mov cx,21 s1: ;年份 mov ax,es:[bx+di] mov [si],ax mov ax,es:[bx+di].2 mov [si].2,ax ;总收入 mov ax,es:84[bx+di] mov [si].5,ax mov dx,es:84[bx+di].2 mov [si].7,dx ;平均收入 div word ptr es:168[di] mov [si].13,ax ;人数 mov ax,es:168[di] mov [si].10,ax xor al,al ;mov [si+0fH],al add bx,2 add di,2 add si,10H loop s1 pop di pop si pop dx pop cx pop bx pop ax ret ;名称: show_str ;功能: 在指定的位置,用指定的颜色,显示一个用0结尾的字符串 ;参数: (dh)=行号(取值范围0-24),(dl)=列号(取值范围0-79),(cl)=颜色 ; ds:si指向字符串的首地址 ;返回: 无 show_str: push ax push bx push cx push dx push es push si push di mov ax,0b800H mov es,ax mov al,0a0H ;行长度 mul dh mov bx,ax ;行地址 xor dh,dh mov di,dx add di,dx ;列地址 mov al,cl ;属性 do: mov cl,[si] mov ch,0 jcxz enddo mov ch,al;属性 mov es:[bx][di],cx inc si add di,2 jmp short do enddo: pop di pop si pop es pop dx pop cx pop bx pop ax ret ;名称: dtoc ;功能: 将word型数据转变为表示十进制数的字符串,字符串以0为结尾符 ;参数: (ax)=结果的低16位,(dx)=结果的高16位,ds:si指向字符串的首地址 ;返回: 无 dtoc: push ax push cx push dx push si push di do1: mov cx,10 call divdw ;(ax)=结果的低16位,(dx)=结果的高16位,(cx)=余数 add cx,30H mov [si],cl inc si mov cx,ax or cx,dx jcxz enddo1 jmp short do1 enddo1: ;mov byte ptr [si],0 mov bp,sp mov di,[bp+2] mov cx,si sub cx,di shr cx,1 jcxz s3 dec si s: xchg dl,[si] xchg dl,[di] xchg dl,[si] dec si inc di loop s s3: pop di pop si pop dx pop cx pop ax ret ;名称: divdw ;参数: (ax)=dword型数据的低16位,(dx)=dword型数据的高16位 ; (cx)=除数 ;返回: (ax)=结果的低16位,(dx)=结果的高16位 ; (cx)=余数 divdw: push bp mov bp,sp sub bp,6 mov [bp],ax mov [bp+2],dx mov ax,[bp+2] xor dx,dx div cx mov [bp+4],ax mov ax,[bp] div cx mov cx,dx mov dx,[bp+4] pop bp ret code ends end main