assume cs:code,ds:data,es:table
data segment para public 'DATA'
db 400h dup(0)
data ends
table segment para public 'TABLE'
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
dd 140417,197514,345980,590827,803530,1183000,1843000
dd 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
table ends
stack segment stack
db 400h dup(0)
stack ends
code segment para public 'CODE'
; divdw 函数
; 入口参数:dx:ax 被除数
; cx 除数
; 出口参数:dx:ax 商
; cx 余数
divdw proc near
push bx
mov bx,ax
mov ax,dx
xor dx,dx
div cx
push ax
mov ax,bx
div cx
mov cx,dx
pop dx
pop bx
ret
divdw endp
; dtoc 函数
; 入口参数: dx:ax : 目标数
; ds:si : 字符串储存地址
; 出口参数: 无
dtoc proc near
push ax
push cx
push dx
push si
push di
push si
pop di
dtoc01: mov cx,10
call divdw
add cl,'0'
mov byte ptr[di],cl
inc di
or dx,dx
jnz dtoc01
or ax,ax
jnz dtoc01
xor cl,cl
mov byte ptr[di],cl
dec di
dtoc02: mov al,[si]
xchg [di],al
mov [si],al
inc si
dec di
cmp di,si
ja dtoc02
pop di
pop si
pop dx
pop cx
pop ax
ret
dtoc endp
; show_str 函数
; 入口参数 dh : 行号
; dl : 列号
; cl : 颜色
; ds:si : 字符串首地址,以字符 0 结束
; 出口参数 无
show_str proc near
push ax
push dx
push si
push di
push es
mov ax,0b800h
mov es,ax
mov al,160
mul dh
mov di,ax
mov al,dl
shl al,1
cbw
add di,ax
cld
show0: lodsb
or al,al
jz show1
stosb
mov al,cl
stosb
jmp show0
show1: pop es
pop di
pop si
pop dx
pop ax
ret
show_str endp
; cls 函数
; 入口参数: 无
; 出口参数: 无
cls proc near
push ax
push bx
push cx
push dx
mov ax,0600h
mov bl,07h
xor cx,cx ; 左上角
mov dx,184fh ; 右下角
int 10h
pop dx
pop cx
pop bx
pop ax
ret
cls endp
pause proc near
push ax
xor ax,ax
int 16h
pop ax
ret
pause endp
work proc near
push ax
push bx
push cx
push dx
push si
push di
push ds
push es
mov ax,data
mov ds,ax
mov ax,table
mov es,ax
xor di,di
mov bp,0208h
mov bx,8*21
mov cx,21
cld
work01: push cx
xor si,si
mov ax,es:[di]
mov dx,es:[di+2]
mov [si],ax
mov [si+2],dx
xor al,al
mov [si+4],al
mov ax,es:[di+4*21]
mov dx,es:[di+4*21+2]
push ax
push dx
add si,10h
call dtoc
xor dx,dx
mov ax,es:[bx]
add si,10h
call dtoc
mov cx,ax
pop dx
pop ax
call divdw
add si,10h
call dtoc
xor si,si
mov dx,bp
mov cl,07
call show_str
add si,10h
add dx,16
call show_str
add si,10h
add dx,16
call show_str
add si,10h
add dx,16
call show_str
add bp,100h
add di,4
add bx,2
pop cx
loop work01
pop es
pop ds
pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret
work endp
main proc far
call cls
call work
call pause
call cls
mov ax,4c00h
int 21h
main endp
code ends
end main