【实验7】为什么用debug测试的时候才T到第二条就停止工作的呢?
本帖最后由 Beng! 于 2012-4-17 18:07 编辑assume cs:code
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 34980,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 11542,14430,15257,17800
data ends
table segment
db 21 dup ('year summ ne ??')
table ends
stack segment
dw 4 dup (0)
stack ends
code segment
start:mov ax,stack
mov ss,ax 《------运行这一条的时候就挂了!!!
mov sp,5
mov ax,data
mov ds,ax
mov ax,table
mov es,ax
mov si,0
mov bx,0
mov cx,21
S: push cx
mov di,0
mov cx,4
s1:mov al,ds:
mov es:,al
inc si
inc di
loop s1
mov cx,4
mov di,0
mov si,0
s2:mov al,ds:
mov es:,al
inc si
inc di
loop s2
mov cx,2
mov si,0
mov di,0
s3:mov al,ds:
mov es:,al
inc si
inc di
loop s3
add bx,16
pop cx
loop s
mov cx,21
mov bx,0
mov di,5
s4:push es:
pop dx
push es:
pop ax
div word ptr es:
mov ax,es:
add bx,16
loop s4
mov ax,4c00h
int 21h
code ends
end start
弱弱的问一下,这样写对不对呀 本帖最后由 Y.H 于 2012-4-17 17:39 编辑
你这个程序还有除法溢出错误!
你定义栈段的时候是:dw 4 dup (0) 意思四个“字”的内存单元,也就是8个字节,
那么应该是mov ss,ax mov sp,8 改为8之后顺利执行过去,
关于你这个除法溢出,还得你自己研究研究除法指令div的执行原理!
不过,看的出来,你在数据类型方面不熟悉,,,,估计你理解了上面的那个错误之后,你的除法溢出错误也能顺利解决。。。。
本帖最后由 莫名其妙 于 2012-4-17 17:45 编辑
code segment
start:mov ax,stack
mov ss,ax 《------运行这一条的时候就挂了!!!
mov sp,5太小了 你用debug 调试的时候最少也要弄个10H的栈
mov cx,21
mov bx,0
mov di,5
s4:push es:
pop dx
push es:
pop ax
这个完全没必要写在循坏外面在循环一次除法.. 只需要找对位置然后进行除法... 往后面翻一番 以前有些发过这个实验题目的!~适当的参考以下别人的代码 试着给代码加上注释(这是理解代码的方法理解对方的思路)
好的 我再试试 谢谢你们 亲 本帖最后由 Y.H 于 2012-4-17 17:59 编辑
嗯,附上我写的,写的比较简单,没有用到循环嵌套,希望能帮你理清头绪
assume cs:code
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,4549000,5937000
;21年来每一年的总收入
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800
;21年来每一年的雇员
data ends
table segment
db 21 dup ('year summ ne ?? ')
table ends
code segment
start:
movax,data
movds,ax
movax,table
moves,ax
movax,0
movbx,0
movsi,0
movdi,0
;先把年份送入table段的前2个字中
movcx,21
year:
movax,ds:
moves:,ax
addsi,2
adddi,2
movax,ds:
moves:,ax
addsi,2
subdi,di
addbx,10h
loop year
movax,0
movbx,0
movsi,84
movdi,0
;把收入送入table段的5,6,7,8字节中
movcx,21
summ:
movax,ds:
moves:,ax
addsi,2
adddi,2
movax,ds:
moves:,ax
addsi,2
movdi,0
addbx,10h
loop summ
movax,0
movbx,0
movsi,168
;把雇员人数送入table段的a,b字节中
movcx,21
guyuan:
movax,ds:
moves:,ax
addsi,2
addbx,10h
loop guyuan
movdi,0
movsi,0
movbx,0
;算出人均工资,取商AX,放入table段的d,e字节中
movcx,21
jieguo:
movax,es:
adddi,2
movdx,es:
subdi,di
divword ptr es:
moves:,ax
addbx,10h
loop jieguo
movax,4c00h
int21h
code ends
end start
Y.H 发表于 2012-4-17 17:44 static/image/common/back.gif
嗯,附上我写的,写的比较简单,没有用到循环嵌套,希望能帮你理清头绪
看到了~很有条理,谢谢,亲
我再研究研究 莫名其妙 发表于 2012-4-17 17:40 static/image/common/back.gif
code segment
start:mov ax,stack
mov ss,ax 《------运行这一条的时候就挂了!!!
谢谢你的提示,回头我去找找看
页:
[1]