王爽汇编 实验7 寻址方式在结构化数据访问中的应用

Power idea 公司从1975年成立一直到1995年的基本情况如下。

下面的程序中,已经定义好了这些数据:
 1 assume cs:code,ds:data,ss:stack
 2 
 3 data segment
 4 
 5         db    '1975','1976','1977','1978','1979','1980','1981','1982','1983'
 6         db    '1984','1985','1986','1987','1988','1989','1990','1991','1992'
 7         db    '1993','1994','1995'
 8         ;以上是表示21年的21个字符串 year
 9 
10 
11         dd    16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
12         dd    345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
13         ;以上是表示21年公司总收入的21个dword数据    sum
14 
15         dw    3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
16         dw    11542,14430,15257,17800
17 
18 data ends
19 
20 table segment
21             ;0123456789ABCDEF
22     db    21 dup ('year summ ne ?? ')
23 table ends
24 
25 stack segment stack
26     db    128 dup (0)
27 stack ends
28 
29 
30 
31 code segment
32 
33     start:    mov ax,stack
34         mov ss,ax
35         mov sp,128
36 
37 
38 
39         mov ax,4C00H
40         int 21H
41 
42 
43 
44 code ends
45 
46 
47 
48 end start
View Code

下面是我写这个实验的答案

 1 assume cs:code,ds:data,ss:stack
 2 
 3 data segment
 4 
 5         db    '1975','1976','1977','1978','1979','1980','1981','1982','1983'
 6         db    '1984','1985','1986','1987','1988','1989','1990','1991','1992'
 7         db    '1993','1994','1995'
 8         ;以上是表示21年的21个字符串 year
 9 
10 
11         dd    0016,0022,0382,1356,2390,8000,16000,24486,50065,97479,140417,197514
12         dd    345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
13         ;以上是表示21年公司总收入的21个dword数据    sum
14 
15         dw    3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
16         dw    11542,14430,15257,17800            ;雇员数
17 
18 data ends
19 
20 table segment
21             ;0123456789ABCDEF
22     db    21 dup ('year summ ne ?? ')
23 table ends
24 
25 stack segment stack
26     db    128 dup (0)
27 stack ends
28 
29 
30 
31 code segment
32 
33     start:    
34         mov ss,ax
35         mov sp,128
36         
37         mov ax,data
38         mov ds,ax
39         
40         mov ax,table
41         mov es,ax
42 
43         mov si,0    ;年
44         mov di,84    ;年收入
45         mov bx,168    ;雇员
46         mov bp,0
47 
48         ;循环21次        
49         mov cx,21
50 
51         ;设置年
52 inputTable:    push ds:[si]
53         pop es:[bp]
54         push ds:[si+2]
55         pop es:[bp+2]
56         
57         ;除数问题
58         mov ax,ds:[di]   ;低地址
59         mov dx,ds:[di+2] ;高地址
60         
61         ;收入问题
62         mov es:[bp + 5],ax
63         mov es:[bp + 7],dx
64 
65         ;雇员数
66         push ds:[bx]
67         pop es:[bp + 0AH]
68 
69         ;0123456789ABCDEF
70           ;('year summ ne ?? ')
71         ;人均收入
72         ;人均收入是用除法,可以用二种方式
73         ;一种是内存方式 一种是寄存器的方式,由于寄存器占用太多,所以用内存的方式
74         div word ptr ds:[bx]
75         mov es:[bp + 0DH],ax
76         
77         add si,4
78         add di,4
79         add bx,2
80         add bp,16
81         loop inputTable
82                     
83         
84         
85 
86         mov ax,4C00H
87         int 21H
88 
89 
90 
91 code ends
92 
93 
94 
95 end start
View Code

运行效果:

 

 

通过这个实验,我的收获是:

1、当时在学校学数据结构这门课的时候,我只知道栈有一个先进先出这个特殊的性质,完成这个实验我发现栈还有一个重要性质 就是可以帮我们临时保留一些性质

2、汇编这门课最重要是我们可以直接操作内存,根据这道题题目,我们只要知道数据从哪里来的,数据又要从哪里去,按这条线去想,稍微花一点心思是可以想出来了的。

 

posted @ 2021-03-14 13:29  小姚yyy  阅读(166)  评论(0编辑  收藏  举报