汇编网首页登录博客注册
mengjiangtao的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
最新留言
文章收藏

[2012-08-09 17:51] 第八章实验

图片载入中
经过1天的努力,终于完成了这个实验。
总结出来几个错点,table的值增量为10h,不是16H,4个字节中需要mov两次,才能将4个字节完全mov掉,做之前一定要先想好并确定你要用哪些寄存器,段寄存器,用来做什么,不能有一点的模糊,注意人均收入是2个字节。下面的这个是我最初的脑中闪现的第一个思路
ASSUME CS:CODESG
DATA 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,1183000,1843000,2759000,3753000,4649000,5937000
        
        DW 3,7,9,13,28,38,130,220,476,779,1001,1442,2258,2793,4037,5635,8226
        DW 11542,14430,15257,17800
DATA ENDS

TABLE SEGMENT
        DB 21 DUP ('YEAR SUM NE ?? ')
TABLE ENDS

CODESG SEGMENT
        START: MOV AX,DATA
                   MOV DS,AX
                   
                   MOV AX,TABLE
                   MOV ES,AX
                   
                   MOV SI,0
                   MOV DI,0
                   MOV BP,0
                   MOV BX,0
                   
                   MOV CX,21
                   ;YEAR WRITE
                S0:MOV DX,DS:[SI]
                   MOV ES:[BP],DX

                   MOV DX,DS:[SI+2H]
                   MOV ES:[BP+2H],DX
                        
                   ;INCOME WRITE
                   MOV DX,' '
                   MOV ES:[BP+4H],DX
                   
                   MOV DX,DS:[SI+54H]
                   MOV ES:[BP+5H],DX
                   
                   MOV DX,DS:[SI+54H+2H]
                   MOV ES:[BP+7H],DX
                   
                   ;STAFF NUMBER
                   MOV DX,' '
                   MOV ES:[BP+9H],DX
                   MOV DX,DS:[DI+00A8H]
                   MOV ES:[BP+0AH],DX
                   
                   ;AVG NUMBER
                   MOV DX,' '
                   MOV ES:[BP+0CH],DX
                   
                   MOV AX,ES:[BP+5H]
                   MOV DX,ES:[BP+7H]
                   DIV WORD PTR ES:[BP+0AH]
                   MOV ES:[BP+0DH],AX
                   
                   MOV DX,' '
                   MOV ES:[BP+0FH],DX
                   ;
                   ADD SI,4H
                   ADD DI,2H
                   ADD BP,10H
                   LOOP S0
                   
                   MOV AX,4CH
                   INT 21H
CODESG ENDS
END START

用栈的是看到论坛里发的,对比一下,结果一样,需要借鉴和保存一下。(数据段的定义就不写拉)
      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
评论次数(2)  |  浏览次数(309)  |  类型(小试验) |  收藏此文  | 

[  fpamc   发表于  2012-08-10 07:59  ]

不错,

[  zhijian   发表于  2012-08-10 19:11  ]

习惯了小写。看大写不舒服。

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码