鱼C论坛

 找回密码
 立即注册
查看: 3355|回复: 0

[汇编作业] 课程设计一

[复制链接]
发表于 2017-12-19 21:47:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 90182si 于 2017-12-19 21:51 编辑

QQ截图20171219214538.jpg
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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 19:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表