实验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
大家看看 为什么除法部分会溢出啊
大家帮忙看看啊 1、第50行,做除法运算时,应该是dword型处以word型,被除数你只设置了低16位的ax,高16位dx没设置;
2、进入下一循环的条件:bx作为转移目标区的地址变量,bx=bx+10,这个没问题。源数据区的地址变量为di,每次循环di=di+4是有问题的;因为在年份数据和年收入数据里每个数据都占据4字节,di+=4可以跳至下一年;但年员工数和年均创收额均为word型,这两类数据应该为di+=2跳转到下一年。 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 static/image/common/back.gif
我也只学到第十章,你这些问题如果自己细心些自己都可以看出来的;我不想帮你改,问题说得很清楚了,你应该 ...
啊这样啊 那我试试看 我感觉我的那个除法代码和小甲鱼老师的 差不多阿咋就错了呢 加油支持LZ啊:lol 经过我的不懈努力终于出炉了~~~~~~~~~~~~~~~~~~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
{:1_1:}{:1_1:}{:1_1:}{:1_1:}{:1_1:}{:1_1:}付出总会有回报的!! 583413088 发表于 2011-8-19 21:03 static/image/common/back.gif
经过我的不懈努力终于出炉了~~~~~~~~~~~~~~~~~~
你试试加用栈的机制再写一遍!
啊。感谢楼主。知道哪错了!~:lol 学基础 发表于 2011-8-20 13:09 static/image/common/back.gif
你试试加用栈的机制再写一遍!
我想在将汇编学完后在研究呢 俺是菜鸟,论坛回复后的第一贴支持楼猪! 只支持,我不懂!!! 顶一个!!!!:lol:lol:lol:lol 学习了!!!!!!!!!!!!!!!!
页:
[1]