鱼C论坛

 找回密码
 立即注册
查看: 1637|回复: 1

这个程序为什么会出现除法溢出?

[复制链接]
发表于 2014-8-19 12:59:32 | 显示全部楼层 |阅读模式

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

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

x
  1. assume cs:code
  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, 5635, 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. code segment
  18. start:        mov ax,data
  19.                 mov ds,ax
  20.                 mov ax,table
  21.                 mov es,ax

  22. s:                mov bx,0
  23.                 mov si,0
  24.                 mov di,0
  25.                 mov cx,21
  26.                 mov al,[bx]
  27.                 mov es:[di],al
  28.                 mov al,[bx+1]
  29.                 mov es:[di+1],al
  30.                 mov al,[bx+2]
  31.                 mov es:[di+2],al
  32.                 mov al,[bx+3]
  33.                 mov es:[di+3],al
  34.                 mov ax,54h[bx]
  35.                 mov dx,56h[bx]
  36.                 mov es:5h[di],ax
  37.                 mov es:56[di],dx
  38.                 mov ax,0a8h[si]
  39.                 mov es:0ah[di],ax
  40.                 mov ax,54h[bx]
  41.                 mov ds,56h[bx]
  42.                 div word ptr ds:0a8h[si]
  43.                 mov es:0dh[di],ax
  44.                 add bx,4
  45.                 add si,2
  46.                 add di,16
  47.                 loop s
  48.                
  49.                 mov ax,4c00h
  50.                 int 21h
  51. code ends
  52. end start
复制代码


这个程序为什么会出现除法溢出?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-8-19 15:58:46 | 显示全部楼层
本帖最后由 小靚同学Leon 于 2014-8-19 16:00 编辑

1. mov ds,56h[bx],div word ptr ds:0a8h[si],这两句是为何?重新定义ds起始地址?
2. mov es:5h[di],ax ,mov es:56[di],dx.  我分析没错的话这两句是把被除数(也就是总收入)低16位和高16位分别保存在ax和bx中。那么除数应该是保留在ds:[ ].168(总人数),你的除数是保留在ds:0a8h,这个地址存放的不是总人数。
3. 你的循环标志S放错位置了。
4. 建议你帖代码的时候尽量给代码做一些备注,你这种直接复制粘贴代码上来,别人读起来很吃力,一般没耐心给你解答,所以尽量做些说明,让别人读起来更容易点,你的求助才会得到更多的解答。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-8 00:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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