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

-------------------------------------------------------------------
栈的使用、结构化程序设计的思想...
话就不多说了,自己体会吧
zcouyangpeng
[第7楼] [ 回复时间:2008-11-04 23:34 ] 
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36
assume cs:code 

data segment 
  db '1975','1976','1978','1979'
  dd 16,22,382,1356             
  dw 3,7,9,13,28,38,130         
data ends 

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

stack segment 
  db 16 dup(0) 
stack ends 

code segment 
s:  mov ax,data 
    mov ds,ax 
    mov ax,table 
    mov es,ax 
    mov ax,stack 
    mov ss,ax 
    mov sp,16 
    mov bx,0 
    mov si,0
    mov di,0
    mov cx,4

xh: push 32[di]---压入人数
    push 18[si]
    push 16[si]---压入收入
    push 2[si]
    push [si]---压入年份
    pop es:[bx]
    pop es:2[bx]---一以上2句弹出年份
    pop es:5[bx]
    pop es:7[bx]---以上2句弹出收入
    pop es:0ah[bx]--弹出人数
    mov ax,es:5[bx]
    mov dx,es:7[bx]    
    div word ptr es:0ah[bx]    
    mov es:0dh[bx],ax--复制平均收入
    mov byte ptr es:4[bx],20h--以下4句对应TABLE段4空格
    mov byte ptr es:9H[bx],20h
    mov byte ptr es:0cH[bx],20h                        
    mov byte ptr es:0FH[bx],20h 
    
    add si,4---以下3句为下次循环准备数据
    add di,2 
    add bx,16  
    loop xh


    mov ax,4c00h 
    int 21h ----------共计32行代码
code ends 
end s

此程序是看到有人用栈命令。所以我也写一个,果然简洁明了,省略很多DATA段的数据地址。看来栈命令对于复制数据要比MOV强很多。2种传送命令结合起来用,比单纯用MOV传送指令强。

在此再次感谢发贴的朋友,让我受到启发
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved