|  | 
 
 
 楼主|
发表于 2012-7-5 11:17:03
|
显示全部楼层 
| 拜托老鸟帮俺看一下吧。。。为什么老是显示 Devide overflow  :L:L:L 
 
 assume cs:codesg,ds:datasg,ss:stacksg,es:tablesg
 
 datasg segment
 db '1975''1976''1977''1978''1979''1980''1981''1982''1983'
 db '1984''1985''1986''1987''1988''1989''1990''1991''1992'
 db '1993''1994''1995'
 ;以上是表示21年的21个字符串
 
 dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,187514
 dd 345980,590827,803530,1183000,2759000,3753000,4649000,5937000
 ;以上是表示21年公司总收的21个dword型数据
 
 dw 3,7,9,13,28,130,220,476,778,1001,1442,2258,2793,4037,5635,2886
 dw 11542,14430,15257,17899
 ;以上是表示21年公司雇员人数的21个word型数据
 
 datasg ends
 
 tablesg segment
 db 21 dup('year sumn ne ?? ')
 tablesg ends
 
 stacksg segment stack
 db 0
 stacksg ends
 
 codesg segment
 start:  mov ax,tablesg
 mov es,ax       ;es指向tablesg段
 
 mov ax,datasg
 mov ds,ax      ;将datasg段定义为数据段
 
 mov ax,stacksg
 mov ss,ax
 mov sp,10h     ;将stacksg段定义为栈段
 
 mov bx,0
 mov cx,21      ;设置循环次数为21次,因为是21年的数据
 s0: push cx        ;将CS入栈保存循环次数
 
 ;复制年份和收入
 mov cx,4        ;设置循环次数为4次,因为是4个字节
 mov si,0
 mov di,0        ;将偏移地址清零
 s1: mov al,ds:[bx+si]    ;用bx来控制行,si来控制列,idata来控制特定的位置
 mov es:[bx+di],al     ;用al不用ax,每次传送一个字节
 mov al,ds:[bx+si+54h]   ;前八十四个字节是年份
 mov es:[bx+di+5],al    ;第五行开始,第四行是空格
 inc si
 inc di
 loop s1
 
 ;复制人数
 mov cx,2           ;设置循环次数为2次,因为是2个字节
 mov si,0
 mov di,0           ;将偏移地址清零
 s2: mov al,ds:[bx+si+0a8h]
 mov es:[bx+di+13],al
 inc si
 inc di
 loop s2
 
 ;计算人均收入
 mov ax,es:[bx+5]    ;将低位放入ax中
 mov dx,es:[bx+7]    ;将高位放入dx中
 div word ptr es:[bx+10]
 mov es:[bx+13],ax
 
 pop cx         ;将CS出栈
 add bx,10h      ;推进一行
 loop s0
 
 mov ax,4c00h
 int 21h         ;中断程序正常退出
 
 codesg ends
 end start
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 
 |