. : : 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

-------------------------------------------------------------------
栈的使用、结构化程序设计的思想...
话就不多说了,自己体会吧
jjch224
[第32楼] [ 回复时间:2010-07-14 20:11 ] 
荣誉值:16
信誉值:0
注册日期:2010-07-09 09:48
调试了一天,经master老大提醒,完成了。
assume cs:codesg,ds:data,ss:stacksg
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'
 ;21年的21个字符串
 dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
 dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
 ;21年的总收入的dword型数据
 dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
 dw 11542,14430,15257,17800
 ;21年雇员人员的word型数据
data ends
table segment
 db 21 dup('year summ ne ?? ')
table ends
stacksg segment
        dw 4 dup (0,0,0,0);16个word型数据作为暂存
stacksg ends
codesg segment
start:        mov ax,data
        mov ds,ax
        mov ax,table
        mov es,ax
        mov ax,stacksg
        mov ss,ax
        mov sp,20h
        
        mov ax,0h
        mov di,0h
        mov si,0h
        
        mov bx,0h
        mov cx,15h
s0:        push cx;保护cx 
        push si;si为雇员
        mov di,0h
        mov si,ax;si为年份
        mov cx,2h
        s1:        mov ax,ds:[si]
                mov es:[bx+di],ax;年份
                mov ax,ds:[si+54h]
                mov es:[bx+5h+di],ax;总收入
                add si,2h
                add di,2h
                loop s1
        pop ax;保护雇员
        push si;保护年份,此时ss:p为年份,ss:p+2为cx
        mov si,ax;雇员
                
        mov ax,ds:[si+0a8h]
        mov es:[bx+0ah],ax;雇员
        add si,2h
        push si;保护雇员,此时ss:p是雇员,ss:p+2为年份,ss:p+4为cx

        mov dx,es:[bx+7]
        mov ax,es:[bx+5]
        div word ptr es:[bx+0ah]
        mov es:[bx+0dh],ax;人均收入
        
        add bx,10h
        pop si;si为雇员
        pop ax;ax为年份
        pop cx;此时sp=20h
        loop s0
        
        mov ax,4c00h
        int 21h        
codesg ends
end start
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved