鱼C论坛

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

求教,这程序哪错了。

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

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

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

x
本帖最后由 loop 于 2011-5-29 23:37 编辑
  1. assume cs:code,ds:data,es:table

  2. data segment
  3.   db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
  4.   
  5.   db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
  6.   
  7.   db '1993','1994','1995'      
  8.   ;以上是表示21年的21个字符串,从0开始做偏移
  9.   
  10.   dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
  11.   
  12.   dd 345980,590827,803530,118300,1843000,2759000,3753000,4649000,5937000
  13.   ;以上是表示21年公司总收入的21个DWORD开型数据
  14.   ; 从54H开始偏移
  15.   dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
  16.   
  17.   dw 11542,14430,15257,17800
  18.   ;以上表示21年公司雇员人数的21个WORD开型数据
  19.   ;从0A8H开始偏移
  20. data ends

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

  24. code segment
  25. start:
  26.          mov ax,data
  27.          mov ds,ax
  28.          mov ax,table
  29.          mov es,ax
  30.          mov bx,0
  31.          ;用于年份与公司收入的偏移
  32.          mov si,0
  33.          ;用于表格行的偏移
  34.          mov di,0
  35.          ;用于公司雇员的偏移
  36.          mov cx,21
  37.          ;设置循环次数为21次
  38.    s:mov ax,[bx]
  39.          mov es:[si],ax
  40.          mov ax,[bx+2]
  41.          mov es:[si+2],ax
  42.          ;这里设置好了年份
  43.          
  44.          mov ax,[di+0a8h]
  45.          mov es:[si+0ah],ax
  46.          ;这里设置了公司雇员数

  47.          mov ax,[bx+54h]
  48.          mov es:[si+5h],dx
  49.          mov dx,[bx+56h]
  50.          mov es:[si+7h],ax
  51.          ;这里设置好了收入
  52.        
  53.          div word ptr es:[di+0a8h]
  54.          mov es:[si+0dh],ax
  55.          ;这里计算好了人均收入并保存
  56.          
  57.          add bx,4
  58.          ;这里设置年份、公司收入的下一次循环偏移
  59.          add si,16
  60.          ;这里设置了下一次循环数据存放的偏移
  61.          add di,2
  62.          ;这里设置了雇员人数下一次循环的的偏移
  63.          loop s
  64.          
  65.          mov ax,4c00h
  66.          int 21h
  67. code ends
  68. end start
  69.          
  70.          
  71.          
  72.          
复制代码
编译没问题,但DEBUG时提示除法溢出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-7 21:01:52 | 显示全部楼层
还没有学到此处,我也想知道是为什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-8 14:09:43 | 显示全部楼层
本帖最后由 loop 于 2011-5-8 22:26 编辑
  1. assume cs:codesg

  2. data segment
  3.         db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
  4.         db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
  5.         db '1993','1994','1995'
  6.         ;以上是表示21年的21个字符串
  7.         dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
  8.         dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
  9.         ;以上是表示21年公司总收入的21个dword数据
  10.         dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5636,8226
  11.         dw 11542,14430,15257,17800
  12.         ;以上是表示21年公司雇员人数的21个word型数据
  13. data ends

  14. table segment
  15.         db 21 dup('year summ ne ?? ')
  16. table ends

  17. codesg segment

  18. start:mov ax,data                            ;将data看成原代码段
  19.           mov ds,ax      
  20.           mov ax,table                           ;将table看成目标代码段
  21.           mov es,ax
  22.                     
  23.           mov cx,21                              ;雇员数的代码
  24.           mov di,0
  25.           mov si,0
  26.    s3:mov dx,ds:[si+168]
  27.           mov es:[di+10],dx
  28.           add si,2
  29.           add di,10H
  30.           loop s3
  31.                                     
  32.                   
  33.             mov bx,0                              ;年份和总收入的代码
  34.           mov si,0
  35.           mov di,0
  36.           mov cx,21                             
  37.    s1:mov ax,cx                           
  38.         mov cx,4                             
  39.          s2:mov dl,ds:[si+bx]                  
  40.             mov es:[di+bx],dl                                   
  41.                 mov dl,ds:[si+bx+84]               
  42.             mov es:[di+bx+5],dl               
  43.                 inc bx                                                     
  44.                 loop s2                                                       
  45.           add si,4
  46.           mov bx,0
  47.           add di,10H                                                       
  48.           mov cx,ax                           
  49.           loop s1                                
  50.           

  51.           mov si,0                               ;前8个人均收入的算法
  52.           mov bx,0
  53.           mov di,0
  54.           mov cx,8                              
  55.    s6:mov ax,ds:[si+84]
  56.       div byte ptr ds:[bx+168]
  57.           mov ah,0
  58.           mov es:[di+13],ax
  59.           add si,4
  60.           add bx,2
  61.           add di,10H
  62.           loop s6         
  63.        
  64.        
  65.           mov bx,0                                      ;后13个人均收入算法
  66.           mov di,80H
  67.           mov cx,13
  68.           mov si,0
  69.    s5:mov ax,ds:[si+116]                        
  70.       mov dx,ds:[si+116+2]
  71.       div word ptr ds:[bx+184]          
  72.           mov es:[di+13],ax                     
  73.           add di,10H                           
  74.           add bx,2  
  75.       add si,4          
  76.           loop s5         
  77.          
  78.          
  79.           mov ax,4c00H
  80.           int 21H
  81.           
  82. codesg ends

  83. 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-3-28 22:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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