. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->数据处理的两个基本问题
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验7除法溢出问题  [已解决] 回复[ 8次 ]   点击[ 427次 ]  
asmcaicai
[帖 主]   [ 发表时间:2011-02-16 23:27 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2011-02-16 23:01
start: mov ax,data
       mov ds,ax
       mov ax,table 
       mov ss,ax
       mov bx,0
       mov si,0
       mov bp,0
       mov dx,0
       
       mov cx,21
   s1: mov ax,[bx+si]
       mov [bp+0],ax
       add si,2
       mov ax,[bx+si]
       mov [bp+2],ax
       add si,2
       add bp,10h
       loop s1

       mov cx,21
       mov si,0
       mov bp,0
   s2: mov ax,[bx+84+si]
       mov [bp+5],ax
       add si,2
       mov ax,[bx+84+si]
       mov [bp+7],ax
       add si,2
       add bp,10h
       loop s2

       mov cx,21
       mov si,0
       mov bp,0
   s3: mov ax,[bx+168+si]
       mov [bp+10],ax
       add si,2
       add bp,10h
       loop s3
                                
       mov cx,21
       mov si,0
       mov bp,0
   s4: mov ax,[bx+84+si]            ;mov ax,[bp+5]
       mov dx,[bx+86+si]            ;mov dx,[bp+7]        
       div word ptr [bx+168+si]     ;div word ptr [bp+10]
       add si,2            
       mov [bp+13],ax
       add bp,10h
       loop s4

       mov ax,4c00h
       int 21h

求人均的调试上面的程序,执行到S4:时,第二次循环出现divide overflow,换成注释部分的代码则运行成功。
请问大家到底是什么原因???
(先把这个问题解决了再编个更好更自短的)
asmcaicai
[第1楼]   [ 回复时间:2011-02-19 15:56 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2011-02-16 23:01
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'

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

    dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000

    dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226

    dw 11452,14430,15257,17800

data ends

table segment

    db 21 dup ('year summ ne ?? ')

table ends

code segment

start: mov ax,data
mov ds,ax
mov ax,table
mov ss,ax
mov bx,0
mov si,0
mov bp,0

mov cx,21
s:mov ax,[bx+si]
mov [bp+0],ax
mov ax,[bx+si+2]
mov [bp+2],ax

mov ax,[bx+84+si]
mov [bp+5],ax
mov ax,[bx+86+si]
mov [bp+7],ax

mov ax,[bx+168+si]
mov [bp+10],ax

mov ax,[bp+5]
mov dx,[bp+7]
div word ptr [bp+10]
mov [bp+13],ax

add si,2
add bp,10h
loop s

mov ax,4c00h
int 21h

code ends

end start


这样编写也会出现溢出,什么原因啊?
大家帮忙解答一下好吗???
asmcaicai
[第2楼]   [ 回复时间:2011-02-19 16:10 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2011-02-16 23:01
为什么用栈时容易出现溢出啊???
asmcaicai
[第3楼]   [ 回复时间:2011-02-19 16:17 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2011-02-16 23:01
第一次LOOP时正常,第二次LOOP时就出现除法溢出了,为什么?
asmcaicai
[第4楼]   [ 回复时间:2011-02-19 16:30 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2011-02-16 23:01
呼...
可能是寻址方式错误
加了个di
mov ax,[bx+168+di]
...最后改为
add si,4
add di,2
...
大体上运行正解!
asmcaicai
[第5楼]   [ 回复时间:2011-02-19 16:42 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2011-02-16 23:01
第一个程序最后改为:

       mov cx,21 
       mov si,0 
       mov di,0
       mov bp,0 
   s4: mov ax,[bx+84+si]            
       mov dx,[bx+86+si]                   
       div word ptr [bx+168+di]      
       add si,4
       add di,2            
       mov [bp+13],ax 
       add bp,10h 
       loop s4 

也大体上运行正确。

求人不如求已
asmcaicai
[第6楼]   [ 回复时间:2011-02-19 16:43 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2011-02-16 23:01
再顶!
asmcaicai
[第7楼]   [ 回复时间:2011-02-19 16:45 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2011-02-16 23:01
这个看了论坛上高手的程序写的,可以说是抄来的。

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

s: mov ax,[bx]
mov es:[si+0],ax
mov ax,[bx+2]
mov es:[si+2],ax

mov ax,[bx+84]
mov es:[si+5],ax

mov dx,[bx+86]
mov es:[si+7],dx

div word ptr [di+168]

mov es:[si+13],ax
mov ax,[di+168]
mov es:[si+10],ax

add si,10h
add bx,4
add di,2

loop s

mov ax,4c00h
int 21h
asmcaicai
[第8楼]   [ 回复时间:2011-02-19 16:46 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2011-02-16 23:01
此贴由 贴主 于 [ 2011-02-19 16:46 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved