583413088 发表于 2011-8-19 13:29:35

实验7 为啥溢出???

本帖最后由 583413088 于 2011-8-19 21:05 编辑

assume cs:codesg,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个字符 占84单元 (54h)

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 数据 占84单元(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数据 占(2ah)

; 数字数据共占126(7e h)
data ends

table segment
db 21 dup ('year summ ne ?? ')
table ends
codesg segment
start : mov ax, data
mov ds, ax
mov ax ,table
mov es, ax

mov si, 0
mov bx, 0
mov di, 0
mov cx, 21

s: mov ax,
mov es:, ax
mov ax,
mov es:,ax



mov ax,
mov es:, ax
mov ax,
mov es:, ax



mov ax,
mov es:, ax

mov ax,
div word ptr ds:
mov es:,ax

add bx, 10h
add di, 4

loop s


mov ax, 4c00h
int 21h
codesg ends
end start
大家看看 为什么除法部分会溢出啊

583413088 发表于 2011-8-19 15:07:36

大家帮忙看看啊

tsembrace 发表于 2011-8-19 15:29:39

1、第50行,做除法运算时,应该是dword型处以word型,被除数你只设置了低16位的ax,高16位dx没设置;
2、进入下一循环的条件:bx作为转移目标区的地址变量,bx=bx+10,这个没问题。源数据区的地址变量为di,每次循环di=di+4是有问题的;因为在年份数据和年收入数据里每个数据都占据4字节,di+=4可以跳至下一年;但年员工数和年均创收额均为word型,这两类数据应该为di+=2跳转到下一年。

583413088 发表于 2011-8-19 17:11:05

tsembrace 发表于 2011-8-19 15:29 static/image/common/back.gif
1、第50行,做除法运算时,应该是dword型处以word型,被除数你只设置了低16位的ax,高16位dx没设置;
2、进 ...

那可不可以,麻烦这位高手将原来的代码   改一改让在下看看呢

tsembrace 发表于 2011-8-19 17:41:46

我也只学到第十章,你这些问题如果自己细心些自己都可以看出来的;我不想帮你改,问题说得很清楚了,你应该自己去做着试试。

583413088 发表于 2011-8-19 17:46:24

tsembrace 发表于 2011-8-19 17:41 static/image/common/back.gif
我也只学到第十章,你这些问题如果自己细心些自己都可以看出来的;我不想帮你改,问题说得很清楚了,你应该 ...

啊这样啊   那我试试看         我感觉我的那个除法代码和小甲鱼老师的 差不多阿咋就错了呢

□_□ 发表于 2011-8-19 18:11:53

加油支持LZ啊:lol

583413088 发表于 2011-8-19 21:03:56

经过我的不懈努力终于出炉了~~~~~~~~~~~~~~~~~~assume cs:codesg,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个字符 占84单元 (54h)
       
        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 数据 占84单元(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数据 占(2ah)
       
        ; 数字数据共占126(7e h)
data ends

table segment
        db 21 dup ('year summ ne ?? ')
table ends
codesg segment
start : mov ax, data
         mov ds, ax
               mov ax ,table
               mov es, ax
               
               mov si, 0
               mov bx, 0
               mov di, 0
               mov cx, 21
               
s:               mov ax,
               mov es:, ax
               mov ax,
               mov es:,ax
               
               
               
               mov ax,
               mov es:, ax
               mov ax,
               mov es:, ax
               
               
               
               mov ax,
               mov es:, ax
               
               mov ax,
               mov dx,
               
               
               div word ptr ds:
               mov es:,ax
               
               add bx, 10h
               add di, 4
               add si, 2
               
               loop s
               
               
               mov ax, 4c00h
               int 21h
codesg ends
end start

学基础 发表于 2011-8-20 02:30:02

{:1_1:}{:1_1:}{:1_1:}{:1_1:}{:1_1:}{:1_1:}付出总会有回报的!!

学基础 发表于 2011-8-20 13:09:03

583413088 发表于 2011-8-19 21:03 static/image/common/back.gif
经过我的不懈努力终于出炉了~~~~~~~~~~~~~~~~~~

你试试加用栈的机制再写一遍!

Potato丶 发表于 2011-8-20 13:18:53

啊。感谢楼主。知道哪错了!~:lol

583413088 发表于 2011-8-20 17:09:14

学基础 发表于 2011-8-20 13:09 static/image/common/back.gif
你试试加用栈的机制再写一遍!

我想在将汇编学完后在研究呢

lanza 发表于 2011-9-10 09:36:11

俺是菜鸟,论坛回复后的第一贴支持楼猪!

cswz88 发表于 2011-9-10 16:37:02

只支持,我不懂!!!

John 发表于 2011-9-12 19:11:48

顶一个!!!!:lol:lol:lol:lol

yadong 发表于 2011-9-12 20:08:13

学习了!!!!!!!!!!!!!!!!
页: [1]
查看完整版本: 实验7 为啥溢出???