. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->数据处理的两个基本问题
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  不是说,有空格的吗?看一下我写的程序[实验七]:  [待解决] 回复[ 0次 ]   点击[ 262次 ]  
583432975
[帖 主]   [ 发表时间:2012-12-08 20:35 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-11-05 12:07
assume cs:code, ss: stack

        stack segment
                dd 4 dup (0);定义16个字节的栈段。
        stack ends;定义栈段到此结束!

        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个字符串    0 ~ 83 

                dd 16, 22, 382, 1356, 2390, 8000, 16000, 24486, 50065, 97479, 140417, 197514
                dd 345980, 590827, 803530, 1183000, 1843000, 2759000, 3753000, 4649000, 5937000
                ;以上是表示21年公司总收入的21个dword型数据。  84 ~  167

                dw 3, 7, 9, 13, 28, 38, 130, 220, 476, 778, 1001, 1442, 2258, 2793, 4037, 5635
                dw 8226, 11524, 14430, 15257, 17800
                ;以上是表示21年公司雇员人数的21个word 型数据!  168 ~  208
        data ends;定义数据段到此结束!

        table segment
                db 21 dup ('year summ ne ?? ');共16个字节*21个字节。
        table ends
          
        code segment
         start: mov ax, stack;设置栈顶!初始状态下栈为空,为什么用栈,因为数据的
                mov ss, ax;暂存一般都是用栈来进行的!作者说了,用
                mov sp, 10H;到了前面的所有的知识,所以还是尽量使用栈!!!!

                mov ax, data
                mov ds, ax;设置源数据段的段地址保存在ds中。

                mov ax, table
                mov es, ax;设置目标数据段的段地址保存在es中。

                mov cx, 21;总共有21条数据!所以循环21次!

                mov bx, 0;这里用bx作为每一行的首偏移地址的变量,段在地在ds中。
                mov si, 0;这里用si作为4个字节(年份 和总收入)的相对偏移地址。
                mov di, 0;这里用di作为员工人数的2个字节的相对偏移地址。

            s:  ;完成年份的录入,中间以空格隔开。
                push 0[si]
                pop es:0[bx]
                push 2[si]
                pop es:2[bx];
                mov byte ptr es:4[bx],' '

                ;完成总收入的录入,中间以空格隔开。
                mov ax,84[si]
                mov es:5[bx], ax;这里为后面的求人均收入做好准备。
                mov dx,86[si]
                mov es:7[bx], dx;要注意es: (*)[bx]。
                mov byte ptr es:9[bx],' '
                
                ;完成员工人数的录入!
                push 168[di];这里要用di,因为到时循环的时候,增加的不一样!
                pop es:10[bx]
                mov byte ptr es:12[bx],' '
                
                ;完成对平公资的求解和录入。
                div word ptr es:10[bx];员工人数作为除数!
                mov es:13[bx], ax
                mov byte ptr es:15[bx],' '

                add si, 4;因为每次操作的是dw类型的。
                add di, 2;因为每次操作的是w类型的。
                add bx, 10H ;因为每一行的大小是10H!所以下一行为+10H。

                loop s

                mov ax, 4c00H
                int 21H
        code ends;定义的代码段到此结束!
        
end start
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved