|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 90182si 于 2017-12-19 21:51 编辑
- assume cs:code,ds:data
- data segment
- db '1975','1976','1977','1978','1979','1980','1981','1982','1983','1984'
- db '1985','1986','1987','1988','1989','1990','1991','1992','1993','1994'
- db '1995'
- dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514,345980
- dd 590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
- dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226,11542,14430,15257,17800
- db 30 dup(0);临时数据段
- data ends
- code segment
- start:
- mov ax,data ;思路:将年份,收入,员工数,平均数依次入栈,再依次保存到临时数据段,
- mov ds,ax ;最后从数据段中出来到0b800h显存区,就这样循环21次
- mov bx,0
- mov si,0
- mov di,0d2h ;临时数据段地址84+84+42=210=d2h
- mov dh,4 ;从第四=五行显示
- mov cx,21
- mains:
- push cx
- push bx
- push di
- push si
- push dx
- mov ax,[bx]
- mov [di],ax
- mov ax,[bx+2]
- mov [di+2],ax ;年份
- mov ax,[bx+84]
- mov dx,[bx+86] ;每次加4字节
- add di,5 ;di+5,因为年份占4字节外加一个0,共5个字节
- call dtoc ;收入
- mov cx,[si+168] ;因为dw只占2个字节,bx每次+4,si每次+2,因此不能用bx代替si,有很多朋友这出现过问题
- call divdw
- mov dx,0
- add di,16 ;先将平均数保存
- call dtoc ;平均数
- sub di,8 ;再保存员工数
- mov ax,[si+168]
- call dtoc ;员工数
- show:
- pop dx ;行
- mov dl,8 ;列
- mov cl,66 ;颜色
- mov si,0d2h ;从0d2h
- call show_str ;显示年份
- add si,5
- add dl,10 ;列+10,间隔,可以自行修改
- call show_str ;显示收入
- add si,8
- add dl,10
- call show_str ;显示员工数
- add si,8
- add dl,10
- call show_str ;显示平均数
- pop si
- pop di
- pop bx
- add si,2
- add bx,4
- inc dh ;下一行
- pop cx
- loop mains
- mov ax,4c00h
- int 21h
- show_str: ;以下三个小程序可以直接拿来用,这里不作解释
- push si
- mov ax,0b800h;(ax,dx,si,di)
- mov es,ax ;
- mov al,160 ;
- mul dh ;
- mov di,ax ;
- mov al,2 ;
- mul dl ;
- add di,ax ;
- next:
- mov al,[si]
- cmp al,0
- je endret
- mov es:[di],al
- mov es:[di+1],cl
- inc si
- add di,2
- jmp next
- endret:
- pop si
- ret
- dtoc:
- push ax
- push dx
- push cx
- push si
- push di
- mov si,0
- tw: mov cx,ax
- jcxz ok
- mov cx,10
- call divdw
- add cx,48
- push cx
- inc si
- jmp tw
- ok: mov cx,si
- of: pop ax
- mov [di],ax
- inc di
- loop of
- pop di
- pop si
- pop cx
- pop dx
- pop ax
- ret
- divdw:
- push bx;(ax,dx,cx)
- push ax
- mov ax,dx
- mov dx,0
- div cx
- mov bx,ax
- pop ax
- div cx
- mov cx,dx
- mov dx,bx
- pop bx
- ret
- code ends
- end start
复制代码
|
|