鱼C论坛

 找回密码
 立即注册
查看: 3939|回复: 3

求教,这程序哪错了。

[复制链接]
发表于 2011-5-7 20:04:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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,[bx]
         mov es:[si],ax
         mov ax,[bx+2]
         mov es:[si+2],ax
         ;这里设置好了年份
         
         mov ax,[di+0a8h]
         mov es:[si+0ah],ax
         ;这里设置了公司雇员数

         mov ax,[bx+54h]
         mov es:[si+5h],dx
         mov dx,[bx+56h]
         mov es:[si+7h],ax
         ;这里设置好了收入
        
         div word ptr es:[di+0a8h]
         mov es:[si+0dh],ax
         ;这里计算好了人均收入并保存
         
         add bx,4
         ;这里设置年份、公司收入的下一次循环偏移
         add si,16
         ;这里设置了下一次循环数据存放的偏移
         add di,2
         ;这里设置了雇员人数下一次循环的的偏移
         loop s
         
         mov ax,4c00h
         int 21h
code ends
end start
         
         
         
         
编译没问题,但DEBUG时提示除法溢出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-7 21:01:52 | 显示全部楼层
还没有学到此处,我也想知道是为什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 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:[si+168]
          mov es:[di+10],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:[si+bx]                   
            mov es:[di+bx],dl                                    
                mov dl,ds:[si+bx+84]                
            mov es:[di+bx+5],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:[si+84]
      div byte ptr ds:[bx+168]
          mov ah,0
          mov es:[di+13],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:[si+116]                         
      mov dx,ds:[si+116+2] 
      div word ptr ds:[bx+184]          
          mov es:[di+13],ax                      
          add di,10H                            
          add bx,2  
      add si,4          
          loop s5         
         
         
          mov ax,4c00H
          int 21H
          
codesg ends

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

评分

参与人数 1荣誉 +1 收起 理由
loop + 1 鱼C因你而精彩~

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-8 18:09:38 | 显示全部楼层
首先,在存放年份的时候就有点问题:
应该是逐个字符存放,那就需要用al而不是ax了。

评分

参与人数 1荣誉 +1 收起 理由
loop + 1 鱼C因你而精彩~

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 20:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表