DATAS SEGMENT
dd 1975,16,3,5,1976,22,7,3,1977,382,9,42,1978,1356,13,104,1979,2390,28,54,1980,80000,38,210
dd 1981,16000,130,123,1982,14486,220,111,1983,50064,476,105,1984,97479,778,125
dd 1985,140417,1001,140,1986,197514,1442,136,1987,345980,2258,153,1988,590827,2793,211
dd 1989,803530,4037,199,1990,1183000,5635,209,1991,1843000,8226,224,1992,2759000,11542,239
dd 1993,3753000,14430,260,1994,4649000,45257,304,1995,5937000,17800,333
;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
dw 16 dup(0)
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
mov ax,stacks
mov ss,ax
mov sp,20h
mov ax,0B828H
mov es,ax
;
mov cx,84 ;共有84个数据项
mov si,0
s1: sub cx,3 ;下面分离了4次循环,故此处原始cx应减去3,(不能减去4,因为最后面的loop S1还会减去一次)
push cx
mov cx,4 ;一行显示4个数据项,故此处循环值为4
s2: call dtoc
add si,4
loop s2
push es
pop ax
add ax,6h ;段地址加6,相当于偏移地址加60h,每行可显示10项数据,但只需显示4项,一项数据占10H个字节。
mov es,ax
pop cx
loop s1
MOV AH,4CH
INT 21H
;
dtoc:
push cx
push si
mov bx,si
mov si,ds:[bx]
mov di,ds:[bx+2]
mov bp,0 ;bp用来累计余数的个数
main:
mov bx,10
mov dx,0
mov ax,di
div bx
push ax
mov ax,si
div bx ;使用公式X/N=int(H/N)*65536+[rem(H/N)*65536+L]/N
;
mov di,dx
inc bp
pop dx
push di ;把余数压栈
mov cx,dx
jcxz cmpax
jmp continue
cmpax:
mov cx,ax
jcxz ok
continue:
mov di,dx
mov si,ax
jmp main
ok: mov di,0 ;0B800H段的偏移地址
mov dx,02h ;字体显示颜色值
mov cx,bp ;余数个数
mov ax,0
wr: pop ax
add al,30h
mov es:[di],al
mov es:[di+1],dl
add di,2
loop wr
push es
pop ax
inc ax
mov es,ax
pop si
pop cx
ret
CODES ENDS
END START