您的位置:首页 > 其它

王爽汇编第8章(实验7)

2011-12-29 13:48 176 查看
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,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800
data ends


;前21个是年份 每个占4字节

;中间21个是总收入 每个占4字节

;最后21个是人数 每个占2字节

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


;21条记录

;将data中的数据复制到table中

;要求格式 用空格间隔(3个间隔+每条记录末尾空格) 每条记录占16字节

;年份 总收入 人数 人均收入

;4 4 2 2

代码如下:

code segment
entry:	mov ax,data
mov ds,ax
mov ax,table
mov ss,ax
mov bx,0
mov si,0
mov bp,0

mov cx,21
s:	mov ax,[bx] ;年
mov [bp],ax
mov ax,[bx+2]
mov [bp+2],ax

mov ax,[168+si] ;人数
mov [10+bp],ax

mov ax,[84+bx] ;收入
mov [bp+5],ax
mov dx,[86+bx]
mov [bp+7],dx

div word ptr[168+si];平均数
mov [13+bp],ax

add bx,4
add si,2
add bp,16
loop s

mov ax,4c00h
int 21h

code ends
end entry


分析:

data中数据 年份起始偏移地址0,单个占4字节 收入起始偏移84,单个占4字节 人数起始偏移168,单个占2字节

第n条记录的年份偏移 4n 收入偏移 84+4n 人数偏移168+2n( 第一条记录n=0)

表示为 [bx ] [84+bx] [168+si ] (bx每次增加4 si每次增加2)

table中第n条记录偏移地址 16n,年份在该条记录中偏移0 收入偏移5 人数偏移10 人均偏移13

表示为 [bp] [ bp+5] [ bp+10] [ bp+13] (bp每次增加16)

如此 可轻易写出代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: