assume cs:code,ds:table,ss:stack
data segment
db '1975','1976','1977','1978','1979'
dd 16123,22123,382123,1356123,2390123
dw 30,70,90,130,280
data ends
table segment
db 5 dup('year summ ne ?? ')
table ends
stack segment
dw 60 dup(0)
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,60
mov ax,data
mov ds,ax
mov bx,0
mov si,20
mov di,10
mov cx,5
;参数入栈,一次循环入栈一年的数据
s0:
sub di,2
sub si,4
;公司人员数量入栈
push [bx][40][di]
;年收入总额入栈
push [bx][20][si].2
push [bx][20][si].0
;年份入栈
push [bx][si].2
push [bx][si].0
loop s0
;生成表格
mov ax,table
mov ds,ax
mov bx,0
mov cx,5
s1:
;设置年份字段
pop [bx][0]
pop [bx][0].2
;构造计算个人收入的除法
pop ax
pop dx
;设置公司总产额
mov [bx][5],ax
mov [bx][5].2,dx
;设置公司人数
pop [bx][10]
;计算个人所得
;如果使用下面的指令,直接除内存单元的内容,程序就有问题,报错退出,但是把内存中的内容复制到寄存器
;中,做除数程序就没问题,这是为什么??????????
;div dw ptr [bx][10]
mov si,[bx][10]
div si
;设置个人所得字段
mov [bx][13],ax
add bx,16
loop s1
mov ax,4c00h
int 21h
code ends
end start |