【第八章】实验七



assume cs:code,ds:data,es:table,ss:stack
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, 15257, 17800
data ends
table segment
db 21 dup ('year sumn ne ?? ')
table ends
stack segment
db 8 dup (0)
stack ends
code segment
start:
;一步一步将data段中的数据放入到table段中
;首d 先初始化段寄存器
mov ax,data
mov ds,ax
mov ax,table
mov es,ax
mov ax,stack
mov ss,ax
mov sp,32
;先放入年份段中数据
mov bx,0
mov si,0
mov cx,21
;因为在内存中,数据以低位 高位的形式存放。我们这里使用AX寄存器将ax中数据拷贝到table时,AX会将寄存器中的数据看作一个值来对待。
;会将其以al ah的形式放入内存中。因此,我们需要将低地址的数据放到低位,高地址数据放到高位,以保证放入表格中的顺序
s0: mov al,ds:0[si]
mov ah,ds:1[si]
mov es:[bx],ax
mov al,ds:2[si]
mov ah,ds:3[si]
mov es:2[bx],ax
add bx,0010h
add si,4
loop s0
;再放入收入数据
mov bx,5
mov si,84
mov cx,21
s1: mov ax,ds:[si]
mov es:[bx],ax
mov ax,ds:2[si]
mov es:2[bx],ax
add bx,0010h
add si,4
loop s1
;再放入雇员数据
mov si,168
mov bx,10
mov cx,21
s2: mov ax,ds:[si]
mov es:[bx],ax
add bx,0010h
add si,2
loop s2
;算出人均收入
mov bx,13
mov si,5
mov di,10
mov cx,21
s3: mov ax,es:[si]
mov dx,es:2[si]
div word ptr es:[di]
mov es:[bx],ax
add bx,0010h
add si,0010h
add di,0010h
loop s3
mov ax,4c00h
int 21h
code ends
end start