例子:
assume cs:codesg datasg segment db '1975','1976','1977','1978','1979','1980','1981','1982','1983','1984','1985' db '1986','1987','1988','1989','1990','1991','1992','1993','1994','1995' ;表示21年的21个字符串 dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514,345980,590827 dd 803530,1183000,1843000,2759000,3753000,4649000,5937000 ;21年总收入的21个dword数据 dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226 dw 11542,14430,15257,17800 ;表示21年公司雇员人数的21个数据 datasg ends table segment db 21 dup ('year summ ne ?? ') table ends
将data段中的数据按如下格式写入table中:
代码如下:
assume cs:codesg datasg segment db '1975','1976','1977','1978','1979','1980','1981','1982','1983','1984','1985' db '1986','1987','1988','1989','1990','1991','1992','1993','1994','1995' ;表示21年的21个字符串 dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514,345980,590827 dd 803530,1183000,1843000,2759000,3753000,4649000,5937000 ;21年总收入的21个dword数据 dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226 dw 11542,14430,15257,17800 ;表示21年公司雇员人数的21个数据 datasg ends table segment db 21 dup ('year summ ne ?? ') table ends stacksg segment db 16 dup (0) stacksg ends codesg segment start: mov ax,datasg mov ds,ax mov ax,table mov es,ax mov ax,stacksg mov ss,ax mov sp,16 ;栈用来储存CX中的数据来进行双重循环 mov cx,21 mov bx,0 ;BX储存table段中每行的内存单元,0<=(BX)<=F,所以每次循环BX要清0 mov di,0 ;DI用来访问储存公司收入的数据段 mov si,0 ;SI用来访问储存公司员工数量的数据段 mov bp,0 ;BP用来访问储存公司年份的数据段 s0: push cx mov cx,4 mov bx,0 s1: mov al,ds:[bp] mov es:[bx],al inc bp inc bx loop s1 ;第一次循环完毕BP会指向下一个年份的首地址,BX会指向table:04H,下面将空格输入此单元格 mov al,' ' mov es:[bx],al inc bx mov ax,ds:[si+84] ;21个年份字符串,每个年份有4个数字字符,共占84Byte,si = 0时ds:[si+84]指向第一年公司收入 mov es:[bx],ax add bx,2 add si,2 mov ax,ds:[si+84] mov es:[bx],ax add si,2 add bx,2 ;此代码段结束时si += 4,ds:[si+84]指向下一年收入 mov al,' ' mov es:[bx],al inc bx mov ax,ds:[di+168] mov es:[bx],ax add di,2 add bx,2 mov al,' ' mov es:[bx],al mov ax,es:[5] mov dx,es:[7] div word ptr es:[0ah] ;注意一下被除数32位除法的规则 mov es:[0dh],ax mov al,' ' mov es:[bx],al mov ax,es inc ax mov es,ax ;在第一次循环结束时给es自增1,使其指向table:10H,在以后的循环同理 ;让其指向“下一行” pop cx loop s0 mov ax,4c00h int 21h codesg ends end start
运行结果: