求助:高手们帮忙看看错在哪里。。。
assume cs:codesg,ds:datasg,ss:stacksg,es:tablesgdatasg 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,187514
dd 345980,590827,803530,1183000,2759000,3753000,4649000,5937000
dw 3,7,9,13,28,130,220,476,778,1001,1442,2258,2793,4037,5635,2886
dw 11542,14430,15257,17899
datasg ends
tablesg segment
db 21 dup('year sumn ne ?? ')
tablesg ends
stacksg segment stack
db 0
stacksg ends
codesg segment
start:mov ax,tablesg
mov es,ax
mov ax,datasg
mov ds,ax
mov ax,stacksg
mov ss,ax
mov sp,10h
mov bx,0
mov cx,21
s0: push cx
mov cx,4
mov si,0
mov di,0
s1: mov al,ds:
mov es:,al
mov al,ds:
mov es:,al
inc si
inc di
loop s1
mov cx,2
mov si,0
mov di,0
s2: mov al,ds:
mov es:,al
inc si
inc di
loop s2
mov ax,es:
mov dx,es:
div word ptr es:
mov es:,ax
pop cx
add bx,10h
loop s0
mov ax,4c00h
int 21h
codesg ends
end start
本帖最后由 NeBen 于 2012-7-5 11:02 编辑
这样把,我把正确的给你看下,我详细的写了注释,看下能帮到你吗? 本帖最后由 NeBen 于 2012-7-6 20:33 编辑
最好不要用多个循环,有点复杂,而且让人不好理解,我是单循环的。 你好,谢谢,你的程序简单明了多了。。。我运行之后查看了,好像输出结果有一点小问题。。。不知道是什么情况。。。{:1_1:} 沉默=金 发表于 2012-7-5 10:34 static/image/common/back.gif
你好,谢谢,你的程序简单明了多了。。。我运行之后查看了,好像输出结果有一点小问题。。。不知道是什么情 ...
什么小问题呢,我自己机子测试完全没问题,结果和答案一致 我不是很清楚,还是我搞错了,我的截图 拜托老鸟帮俺看一下吧。。。为什么老是显示 Devide overflow:L:L:L
assume cs:codesg,ds:datasg,ss:stacksg,es:tablesg
datasg 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个字符串
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,187514
dd 345980,590827,803530,1183000,2759000,3753000,4649000,5937000
;以上是表示21年公司总收的21个dword型数据
dw 3,7,9,13,28,130,220,476,778,1001,1442,2258,2793,4037,5635,2886
dw 11542,14430,15257,17899
;以上是表示21年公司雇员人数的21个word型数据
datasg ends
tablesg segment
db 21 dup('year sumn ne ?? ')
tablesg ends
stacksg segment stack
db 0
stacksg ends
codesg segment
start:mov ax,tablesg
mov es,ax ;es指向tablesg段
mov ax,datasg
mov ds,ax ;将datasg段定义为数据段
mov ax,stacksg
mov ss,ax
mov sp,10h ;将stacksg段定义为栈段
mov bx,0
mov cx,21 ;设置循环次数为21次,因为是21年的数据
s0: push cx ;将CS入栈保存循环次数
;复制年份和收入
mov cx,4 ;设置循环次数为4次,因为是4个字节
mov si,0
mov di,0 ;将偏移地址清零
s1: mov al,ds: ;用bx来控制行,si来控制列,idata来控制特定的位置
mov es:,al ;用al不用ax,每次传送一个字节
mov al,ds: ;前八十四个字节是年份
mov es:,al ;第五行开始,第四行是空格
inc si
inc di
loop s1
;复制人数
mov cx,2 ;设置循环次数为2次,因为是2个字节
mov si,0
mov di,0 ;将偏移地址清零
s2: mov al,ds:
mov es:,al
inc si
inc di
loop s2
;计算人均收入
mov ax,es: ;将低位放入ax中
mov dx,es: ;将高位放入dx中
div word ptr es:
mov es:,ax
pop cx ;将CS出栈
add bx,10h ;推进一行
loop s0
mov ax,4c00h
int 21h ;中断程序正常退出
codesg ends
end start
你把简单的问题复杂化了,算了还是贴上代码,我自己的方法,也是多循环的,你看看把,能给你点帮助吗,真心看不懂你的代码,排版正常点。。。。:L 没有,只是刚刚接触汇编,想把刚刚学的东西都用上,有劳你了。。。排版我是直接用的的复制粘贴。。。请谅解。。。呵呵。。。{:1_1:} 还没有学到 呵呵 飘过
页:
[1]