鱼C论坛

 找回密码
 立即注册
查看: 3700|回复: 2

实验七,我用另外一种思路会出错,请教出错原因!

[复制链接]
发表于 2011-4-20 13:56:12 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 shangyl00 于 2011-4-20 17:13 编辑

我的代码
  1. assume cs:codesg,ds:data,es:table,ss:stack
  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.        
  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.        
  10.         dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
  11.         dw 11542,14430,15257,17800
  12. data ends

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

  16. stack segment
  17.         dw 0,0,0,0,0,0,0,0
  18. stack ends

  19. codesg segment
  20. start:        mov ax,data
  21.                 mov ds,ax
  22.                 mov ax,table
  23.                 mov es,ax
  24.                 mov dx,0
  25.                 mov si,0
  26.                 mov cx,21
  27.        
  28. s0:                mov ax,[bx]
  29.                 mov es:[si],ax
  30.                 mov ax,[bx+2]
  31.                 mov es:[si+2],ax
  32.                 add si,16
  33.                 add bx,4
  34.                 loop s0
  35.                 mov si,0
  36.                 mov cx,21
  37.                 ;以上将年份数据放入table

  38. s1:                mov ax,[bx]
  39.                 mov es:[si+5],ax
  40.                 mov ax,[bx+2]
  41.                 mov es:[si+5+2],ax
  42.                 add si,16
  43.                 add bx,4
  44.                 loop s1
  45.                 mov si,0
  46.                 mov cx,21
  47.                 ;以上将收入数据放入table
  48.                
  49. s2:                mov ax,[bx]
  50.                 mov es:[si+10],ax
  51.                 add si,16
  52.                 add bx,2
  53.                 loop s2
  54.                 mov si,0
  55.                 mov bx,0
  56.                 mov cx,21
  57.                 ;以上将雇员数放入table

  58. s3:                mov ax,[bx+84]
  59.                 mov dx,[bx+86]
  60.                 div word ptr ds:[bx+168]
  61.                 mov es:[si+13],ax
  62.                 add si,16
  63.                 add bx,4
  64.                 loop s3
  65.                 ;计算人均收入
  66.                
  67.                 mov ax,4c00h
  68.                 int 21h
  69. codesg ends
  70. end start       
复制代码
运行最后一个loop S3时会出现如下问题:求解~~
3.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-4-20 17:05:30 | 显示全部楼层
我再次调试并从头到尾看了下代码,将S3循环部分更改,并用更直观结构的方式表示寻址,详细代码如下,调试通过,哈哈。。。。。。
  1. assume cs:codesg,ds:data,es:table
  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.        
  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.        
  10.         dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
  11.         dw 11542,14430,15257,17800
  12. data ends

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

  16. stack segment
  17.         dw 0,0,0,0,0,0,0,0
  18. stack ends

  19. codesg segment
  20. start:        mov ax,stack
  21.                 mov ss,ax
  22.                 mov sp,10h
  23.                 mov ax,data
  24.                 mov ds,ax
  25.                 mov ax,table
  26.                 mov es,ax
  27.                 mov dx,0
  28.                 mov si,0
  29.                 mov cx,21
  30.        
  31. s0:                mov ax,[bx+0]
  32.                 mov es:[si+0],ax
  33.                 mov ax,[bx+2]
  34.                 mov es:[si+2],ax
  35.                 add si,16
  36.                 add bx,4
  37.                 loop s0
  38.                 mov si,0
  39.                 mov cx,21
  40.                 ;以上将年份数据放入table

  41. s1:                mov ax,[bx+0]
  42.                 mov es:[si+5],ax
  43.                 mov ax,[bx+2]
  44.                 mov es:[si+7],ax
  45.                 add si,16
  46.                 add bx,4
  47.                 loop s1
  48.                 mov si,0
  49.                 mov cx,21
  50.                 ;以上将收入数据放入table
  51.                
  52. s2:                mov ax,[bx+0]
  53.                 mov es:[si+10],ax
  54.                 add si,16
  55.                 add bx,2
  56.                 loop s2
  57.                 mov si,0
  58.                 mov cx,21
  59.                 ;以上将雇员数放入table
  60. s3:                mov ax,es:[si+5]          ;总收入,被除数,低16位放ax
  61.                 mov dx,es:[si+7]          ;总收入,被除数,高16位放dx
  62.                 div word ptr es:[si+10];做除法运算
  63.                 mov es:[si+13],ax       ;将商写到table段
  64.                 add si,16
  65.                 loop s3
  66.                 ;计算人均收入
  67.                
  68.                 mov ax,4c00h
  69.                 int 21h
  70. codesg ends
  71. end start
复制代码
4.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-4-20 17:12:06 | 显示全部楼层
本帖最后由 shangyl00 于 2011-4-20 17:13 编辑

通过,下班了~~大家加油!
还是希望有人能告诉我,我顶楼程序为什么会除法溢出~ 不胜感激哈~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-3-28 22:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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