assume cs:code
stack segment ;栈段
dw 0,0,0,0,0,0,0,0
stack ends
data segment ;属性
db 1,'year',' num',' sum',' ave'
data ends
data0 segment ;年份 076f
db 1,'2000','2001','2002','2003','2004'
data0 ends
data1 segment ;员工人数
db 1,4,11,16,20,25
data1 ends
data2 segment ;总工资支出
db 1
dw 16,22,384,1400,2300
data2 ends
data3 segment ;平均收入
db 1
dw 0,0,0,0,0
data3 ends
table segment
db 'year',' num',' sum',' ave' ;属性
db 80 dup (0) ;数据
table ends
;6x16的矩阵,第一行为属性名,第二行到第六行为属性值
;year num Sum ave:属性名
;0~3 5~7 9~11 13~15:属性名首地址
;0 5 9 13:数据首地址
code segment
;计算平均收入
start:
mov si,1
mov di,0
mov cx,5
s:
mov dx,data2 ;被除数数组~2byte
mov ds,dx
mov ax,[si]
mov dx,data1 ;除数数组~1byte
mov ds,dx
mov bl,[di]
div bl ;除操作
mov dx,data3 ;商数组~2byte
mov ds,dx
mov ah,0
mov [si],ax
inc si
inc si
inc di
loop s
;将数据填入表中
mov dx,stack ;设置栈大小 077A:0027
mov ss,dx
mov sp,16
mov dx,table ;指定表的位置 0774:0000
mov es,dx
mov bx,10h
;数据写入table
mov cx,5
s0:
push cx
;输入年份
mov di,0
mov dx,data0
mov ds,dx
mov dl,ds:[0] ;记录下一次读取第几个内存单元
mov dh,0
mov si,dx
mov cx,4
s1:
mov al,[si] ;read
mov es:[bx+di],al ;write
inc si
inc di
inc dl
mov ds:[0],dl
loop s1
pop cx
;人数
mov di,5
mov dx,data1
mov ds,dx
mov dl,ds:[0] ;记录下一次读取第几个内存单元
mov dh,0
mov si,dx
mov al,[si] ;read
mov es:[bx+di],al ;write
inc dl
mov ds:[0],dl
;总工资
mov di,9
mov dx,data2
mov ds,dx
mov dl,ds:[0] ;记录下一次读取第几个内存单元
mov dh,0
mov si,dx
mov ax,[si] ;read
mov es:[bx+di],ax ;write
inc dl
inc dl
mov ds:[0],dl
;平均工资
mov di,13
mov dx,data3
mov ds,dx
mov dl,ds:[0] ;记录下一次读取第几个内存单元
mov dh,0
mov si,dx
mov ax,[si] ;read
mov es:[bx+di],ax ;write
inc dl
inc dl
mov ds:[0],dl
add bx,10h
loop s0
mov ax,4c00h ;077A:00b8
int 21h
code ends
end start
8086汇编-实验7-制表
最新推荐文章于 2023-06-05 16:42:48 发布