【无涯契】【七】

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



 


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值