[hide]谢谢您的回复~~嘿嘿!![/hide]assume cs:code ,ds:data ,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'
;======================================================================
d2 dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 456980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
;======================================================================
d3 dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800
;======================================================================
d4 dw 20 dup (0)
data ends
;======================================================================
stack segment
dw 20 dup (0)
stack ends
;======================================================================
;======================================================================
code segment
;======================================================================
strat: mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov ax,stack
mov ss,ax
mov sp,20
;-----------------初始化寄存器
mov bx,160
mov si,0
mov di,0
;-----------------DI指向显存
mov bp,offset d2
;-----------------BP指向D2
mov cx,21
;======================================================================
;显示日期
zhuxh: call riqi
;======================================================================
;显示收入
push di
xor di,di
add di,30
call shouru
pop di
;----------------------写人数间距加20
;======================================================================
;显示人数
push di
xor di,di
add di,60
call renshu
pop di
;----------------------与平均娄间距加20
;======================================================================
;显示平均
push di
xor di,di
add di,90
call pingjun
call dtoc
;----------------------结果转ASCII码
call show_str
pop di
;----------------------显示
;======================================================================
add bx,160
mov di,0
add si,2
add bp,4
loop zhuxh
mov ah,01
int 21h
;========= ====================================================
;=====================================================================
;=====================显示show_str=======================================
show_str:
push bp
push cx
mov bp,offset d4
xssj: mov cl,ds:[bp]
mov ch,0
inc bp
jcxz xswk
mov es:[bx+di],cl
inc di
mov es:[bx+di],2
inc di
jmp xssj
xswk: pop cx
pop bp
ret
;=====================================================================
;========================转换DTOC=======================================
dtoc: push si
push di
push bp
push cx
push bx
mov bx,10
mov si,0
;-----------保存数据
d_hys: mov bp,ax
;-----------转移L位
mov ax,dx
xor dx,dx
;-----------H转AX D清零
div bx
;-----------H/10
mov di,ax
;-----------H结果=DI
mov ax,bp
;-----------L重赋给AX
div bx
;-----------REG+L/10 DX=余娄 H结果=DI
;=========== L结果AX
mov cx,bp
jcxz d_wk
;-----------余数为空jmp 到出栈
add dx,30h
push dx
inc si
xor dx,dx
;------------余数+30H=ASCII
mov dx,di
;------------H重赋给DX
jmp d_hys
;------------判断H为0,不为0循环
;============ 为0做L位除法
d_wk: mov cx,si
;------------设定循环数
jcxz d_ecs
;------------CX为0 jmpECS
mov si,offset d4
;------------d4数据给SI
d_cz: pop ds:[si]
inc si
loop d_cz
;-------------循环出栈
d_ecs: pop bx
pop cx
d_2: pop bp
pop di
pop si
ret
;=====================================================================
;==========================除法divdd=====================================
divdd: push si
push bp
push bx
push cx
;-------------保存数据
mov bp,ax
;-------------L转BP
mov ax,dx
mov dx,0
;-------------H给AX
div bx
;-------------H/10
mov si,ax
;-------------H结果给SI
mov ax,bp
;-------------L重赋给AX
div bx
mov dx,si
;-------------H赋值给DX
pop cx
pop bx
pop bp
pop si
ret
;====================================================================
;==========================日期riqi=====================================
riqi: push si
;------------------保存数据
;push
add si,si
mov ax,ds:[si]
mov ds:0d2h,ax
mov ax,ds:2[si]
mov ds:0d4h,ax
mov ds:0d6h,0
call show_str
pop si
ret
;====================================================================
;==========================收入shouru==================================
shouru: push si
push bp
;------------------保存数据
mov si,offset d4
;------------------d4=si
mov ax,ds:[bp]
mov dx,ds:2[bp]
;-------------------AX&DX赋值
call dtoc
call show_str
;-------------------转换ASCII&显示
pop bp
pop si
ret
;====================================================================
;==========================人数renshu===================================
renshu: push si
;------------------保存数据
;mov dx,offset d3
mov ax,ds:0a8h[si]
mov dx,0
call dtoc
call show_str
pop si
;===================================================================
;==========================平均pingjun=================================
pingjun: push si
push bx
push di
push bp
;-------------------;保存数据
mov ax,ds:[bp]
mov dx,ds:2[bp]
;-------------------DX&AX赋值 被除数
mov bx,ds:0A8H[si]
;-------------------BX赋值 除数
call divdd
pop bp
pop di
pop bx
pop si
ret
code ends
end strat