| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4085 人关注过本帖
标题:王爽汇编语言实验 7 各位大神给检查下!
只看楼主 加入收藏
bxxue
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-9-5
结帖率:80%
收藏
 问题点数:0 回复次数:2 
王爽汇编语言实验 7 各位大神给检查下!
assume cs:codesg
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,5659000,5937000

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

data ends
table segment
db 21 dup ('year summ ne ?? ')
table ends

codesg segment
start:
  mov ax,data
  mov es,ax
  mov ax,table
  mov ds,ax
  mov si,0
  mov cx,21
  mov bp,168
 
s:mov bx,0
  mov ax,es:[bx+si]
  mov ds:[bx],ax
  add bx,2
  mov ax,es:[bx+si]
  mov ds:[bx],ax
 
  mov al,' '
  add bx,2
  mov ds:[bx],al
  mov ax,es:[si+84]
  inc bx
  mov ds:[bx],ax
  add bx,2
  mov ax,es:[si+86]
  add bx,2
  mov ds:[bx],ax
  inc bx
  mov al,' '
  mov ds:[bx],al
  inc bx
  mov ax,es:[bp+si]
  mov ds:[bx],ax
  add bx,2
  mov ds:[bx],al
 
  mov dx,ds:[5]
  mov ax,ds:[7]
  div word ptr ds:[10]
  inc bx
  mov ds:[bx],ax
  mov al,' '
  add bx,2
  mov ds:[bx],al
 
  mov ax,ds
  inc ax
  mov ds,ax
  add si,4
  sub bp,2
  loop s


 
  mov ax,4c00h
  int 21h
 
codesg ends
end start
逻辑上都没问题   运行完后   就年份全部按要求填入了   其他的都没有
2014-04-17 16:46
ghhr6
Rank: 1
等 级:新手上路
威 望:1
帖 子:9
专家分:0
注 册:2014-6-22
收藏
得分:0 
啛,怎么挖愤了???

[ 本帖最后由 ghhr6 于 2014-11-28 05:59 编辑 ]
2014-11-28 05:57
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
收藏
得分:0 
    很久以前的帖子。
    楼主的程序存在很多问题,其实你自己可以将该程序编译、连接成可执行文件在DEBUG下调试,就可以找到问题。下面是我的分析:
    s:mov bx,0
  mov ax,es:[bx+si]
  mov ds:[bx],ax
  add bx,2
  mov ax,es:[bx+si]
  mov ds:[bx],ax

  mov al,' '
  add bx,2
  mov ds:[bx],al
  mov ax,es:[si+84]
  inc bx
  mov ds:[bx],ax
  add bx,2
  mov ax,es:[si+86]
  add bx,2
  mov ds:[bx],ax
  inc bx
  mov al,' '
  mov ds:[bx],al
  inc bx
  mov ax,es:[bp+si]
  mov ds:[bx],ax
  add bx,2
  mov ds:[bx],al

  mov dx,ds:[5]
  mov ax,ds:[7]
  div word ptr ds:[10]
  inc bx
  mov ds:[bx],ax
  mov al,' '
  add bx,2
  mov ds:[bx],al

  mov ax,ds
  inc ax
  mov ds,ax
  add si,4
  sub bp,2
  loop s

    上述代码中第一处红色代码BX多加了一次2,应该删除;第二处红色代码中,此时AL的值已不再是空格字符20H,而是[BP+SI]处的数值,且这个操作完全没有必要,可以删除;第一处绿色代码应改为“ADD BX,2”,以指向需要存放空格的内存单元;第二处绿色代码改为“ADD BX,3”,以指向存放人均收入的内存单元;第一处蓝色代码,楼主的本意是用收入除以雇员数,得到人均收入,但你的代码完全没有定位到收入和雇员人数的内存单元,应删掉重新写;第二处蓝色代码,你将DS数据段地址改变了,这是错误的,应删除。
    楼主的程序还应再优化一下,最好是重新编写。如程序中多次将空格字符20H存入TABLE段中,这是完全没有必要的,因为你在定义数据时就已经定义了空格字符,在操作时,通过改变BX变址寄存器的值直接跳过空格字符;再比如程序中计算人均收入,可以将数据段中定义的收入值和雇员人数在赋给TABLE段的相应位之后或之前放入栈中,在需要计算人均收入时再出栈。
    希望以上的分析能够帮到楼主!

[ 本帖最后由 取名字 于 2015-4-30 21:12 编辑 ]
2015-04-30 21:08
快速回复:王爽汇编语言实验 7 各位大神给检查下!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016138 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved