《汇编语言》实验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 | ? |
下面的程序中, 已经定义好了这些数据:
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段中。
回答
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