. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->数据处理的两个基本问题
主题 : :  看看高手是怎么写试验7代码的!!!强烈推荐中...  [待解决] 回复[ 104次 ]   点击[ 9699次 ]  
liuxianming2001
[帖 主] [ 发表时间:2008-10-10 02:55 ] 
荣誉值:0
信誉值:0
注册日期:2008-09-03 00:18
DATAS  SEGMENT
              DB        '1975', '1976', '1977', '1978', '1979', '1980', '1981', '1982'
              DB        '1983', '1984', '1985', '1986', '1987', '1988', '1989', '1990'
              DB        '1991', '1992', '1993', '1994', '1995'
    
              DD        16, 22, 382, 1356, 2390, 8000, 16000, 24486, 50065, 97479, 140417, 197514
              DD        345980, 590827, 803530, 118300, 184300, 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
       DATAS  ENDS

       TABLE  SEGMENT
              DB        21 DUP ('year summ ne ?? ')
       TABLE  ENDS

      STACKS  SEGMENT
              DB 16 DUP (0)
      STACKS  ENDS

ASSUME    CS:CODES,DS:DATAS,SS:STACKS

       CODES  SEGMENT
      START:
              ;相关寄存器初始化
              MOV       AX,DATAS
              MOV       DS,AX
              MOV       AX,TABLE
              MOV       ES,AX
              MOV       AX,STACKS
              MOV       SS,AX
              MOV       SP,16
    
              MOV       BX,0
              MOV       BP,0
              MOV       DI,0
              MOV       SI,0

              MOV       CX,21

      cycle:  ;使用栈复制年份
              PUSH      [DI].0
              PUSH      [DI].2
              POP       ES:[BP].2
              POP       ES:[BP].0
              
              ;使用栈复制收入
              PUSH      54H.[DI].0
              PUSH      54H.[DI].2
              POP       ES:[BP].7
              POP       ES:[BP].5

              ;使用栈复制雇员数
              PUSH      0A8H.[SI]
              POP       ES:[BP].0AH

              ;计算人均收入
              MOV       AX,ES:[BP].5
              MOV       DX,ES:[BP].7
              DIV WORD PTR ES:[BP].0AH
              MOV       ES:[BP].0DH,AX

              ADD       SI,2H
              ADD       DI,4H
              ADD       BP,10H

              loop cycle
                   

              MOV       AH,4CH
              INT       21H
       CODES  ENDS
END       START

-------------------------------------------------------------------
栈的使用、结构化程序设计的思想...
话就不多说了,自己体会吧
gao693282043
[第41楼] [ 回复时间:2010-09-05 11:16 ] 
荣誉值:0
信誉值:0
注册日期:2010-04-06 11:41
这个题 不过中规中矩而已 客观点评价 只能说比较清爽 整体思路比较清晰

用栈 只是为了数据交换方便而已  你用一次循环实现 还是多次循环实现 不过是人省力 和不省力的问题
处于 维护的考虑楼主这个代码是 值得肯定的 但如果一个程序 过长 重复过多的话
仅一个循环是不现实的 因为代码过长了!
把代码变短无非是总结规律 用递归等方式 代码越短越难懂 和古文一样 但是 脑力和体力区别就在于此啊
如果仅仅从 清晰易懂 角度考虑 高级语言也没有出现的必要的 典型的累死写代码的
就这题而言 es:0~3 和 5~8 单元是有共同性的 当然 就为了这个2个而专门写个循环不划算
但是 如果是20个200个呢? 所以我觉得这道题 不应该有你们那么高的评价
至于算法 更加谈不上了
------------------
回复:楼主的思考很辨证 凡皆因形势而论 栈与循环都是为了解决问题 用得巧妙 用的经济 才是高手
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved