《汇编语言》实验7 寻址方式在结构化数据访问中的应用

任务

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

年份 收入(千美元) 雇员(人) 人均收入(千美元)
1975 16 3 ?
1975 22 7 ?
1975 382 9 ?
1975 1356 13 ?
1975 2390 28 ?
1975 8000 38 ?
?
1995 5937000 17800 ?

下面的程序中, 已经定义好了这些数据:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
assume cs:code

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'

    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,778,1001,1442,2258,2793,4037,5635,8226
    dw 11542,14430,25257,17800
data ends

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

编程, 将data段中的数据按如下格式写入到table段中, 并计算21年中的人均收入(取整), 结果也按照下面的格式保存在table段中。
“数据表”

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
assume cs:code

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'

    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,778,1001,1442,2258,2793,4037,5635,8226
    dw 11542,14430,25257,17800
data ends

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

code segment
start:
    mov ax,data
    mov ds,ax

    mov ax,table
    mov es,ax

    mov bx,0
    mov di,0
    mov si,0
    mov cx,21
s:
    mov ax,ds:[0].0[bx]  ; 年份
    mov es:[si].0[0],ax
    mov ax,ds:[0].2[bx]
    mov es:[si].2[0],ax

    mov es:[si].4[0],' ' ; 空格

    mov ax,ds:[84].0[bx] ; 收入
    mov es:[si].5[0],ax
    mov ax,ds:[84].2[bx]
    mov es:[si].5[2],ax

    mov byte ptr es:[si].5[4],' ' ; 空格

    mov ax,ds:168[di]       ; 员工数量
    mov es:[si].0ah[0],ax

    mov byte ptr es:[si].0ah[2],' ' ; 空格

    mov ax,ds:[84].0[bx]  ; 总收入低位放入ax
    mov dx,ds:[84].2[bx]  ; 总收入高位放入dx
    div word ptr ds:168[di] ; 计算人均收入

    mov es:[si].0dh[0],ax   ; 商放入table中es:[si+D]字型单元

    mov byte ptr es:[si].0fh[0],' ' ; 空格

    add bx,4
    add di,2
    add si,10h
    loop s

code ends

end start