陌路狂奔 发表于 2011-5-7 20:04:08

求教,这程序哪错了。

本帖最后由 loop 于 2011-5-29 23:37 编辑

assume cs:code,ds:data,es:table

data 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个字符串,从0开始做偏移

dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514

dd 345980,590827,803530,118300,1843000,2759000,3753000,4649000,5937000
;以上是表示21年公司总收入的21个DWORD开型数据
; 从54H开始偏移
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个WORD开型数据
;从0A8H开始偏移
data ends

table segment
db 21 dup ('yaer summ ne ?? ')
table ends

code segment
start:
       mov ax,data
       mov ds,ax
       mov ax,table
       mov es,ax
       mov bx,0
       ;用于年份与公司收入的偏移
       mov si,0
       ;用于表格行的偏移
       mov di,0
       ;用于公司雇员的偏移
       mov cx,21
       ;设置循环次数为21次
   s:mov ax,
       mov es:,ax
       mov ax,
       mov es:,ax
       ;这里设置好了年份
       
       mov ax,
       mov es:,ax
       ;这里设置了公司雇员数

       mov ax,
       mov es:,dx
       mov dx,
       mov es:,ax
       ;这里设置好了收入
       
       div word ptr es:
       mov es:,ax
       ;这里计算好了人均收入并保存
       
       add bx,4
       ;这里设置年份、公司收入的下一次循环偏移
       add si,16
       ;这里设置了下一次循环数据存放的偏移
       add di,2
       ;这里设置了雇员人数下一次循环的的偏移
       loop s
       
       mov ax,4c00h
       int 21h
code ends
end start
       
       
       
       编译没问题,但DEBUG时提示除法溢出

moshushi 发表于 2011-5-7 21:01:52

还没有学到此处,我也想知道是为什么

hs394133646 发表于 2011-5-8 14:09:43

本帖最后由 loop 于 2011-5-8 22:26 编辑

assume cs:codesg

data 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,197514
        dd 345980,590827,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,5636,8226
        dw 11542,14430,15257,17800
        ;以上是表示21年公司雇员人数的21个word型数据
data ends

table segment
        db 21 dup('year summ ne ?? ')
table ends

codesg segment

start:mov ax,data                            ;将data看成原代码段
          mov ds,ax      
          mov ax,table                           ;将table看成目标代码段
          mov es,ax
                    
          mov cx,21                              ;雇员数的代码
          mov di,0
          mov si,0
   s3:mov dx,ds:
          mov es:,dx
          add si,2
          add di,10H
          loop s3
                                    
                  
          mov bx,0                              ;年份和总收入的代码
          mov si,0
          mov di,0
          mov cx,21                           
   s1:mov ax,cx                           
      mov cx,4                           
       s2:mov dl,ds:                  
          mov es:,dl                                 
                mov dl,ds:               
          mov es:,dl               
                inc bx                                                   
                loop s2                                                       
          add si,4
          mov bx,0
          add di,10H                                                       
          mov cx,ax                           
          loop s1                              
          

          mov si,0                               ;前8个人均收入的算法
          mov bx,0
          mov di,0
          mov cx,8                              
   s6:mov ax,ds:
      div byte ptr ds:
          mov ah,0
          mov es:,ax
          add si,4
          add bx,2
          add di,10H
          loop s6       
       
       
          mov bx,0                                      ;后13个人均收入算法
          mov di,80H
          mov cx,13
          mov si,0
   s5:mov ax,ds:                        
      mov dx,ds:
      div word ptr ds:          
          mov es:,ax                     
          add di,10H                           
          add bx,2
      add si,4          
          loop s5       
       
       
          mov ax,4c00H
          int 21H
          
codesg ends

end start这是我当初学汇编时候的程序,希望对你有帮助

fishz 发表于 2011-5-8 18:09:38

首先,在存放年份的时候就有点问题:
应该是逐个字符存放,那就需要用al而不是ax了。
页: [1]
查看完整版本: 求教,这程序哪错了。