【第八章】实验七

1.PNG

2.PNG

3.PNG

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