汇编网首页登录博客注册
landyking的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
好友圈
文章收藏
友情链接

[2011-09-05 21:16] 课程设计1(版本2,一次循环)

assume cs:code
data segment
        ;年份
        db '1975','1976','1977','1978','1979','1980','1981'
        db '1982','1983','1984','1985','1986','1987','1988'
        db '1989','1990','1991','1992','1993','1994','1995'
        ;营业额
        dd 16,22,382,356,2390,8000,16000
        dd 24486,50065,97479,140417,197514,345980,590827
        dd 803530,1183000,1843000,2759000,3753000,4649000,5937000
        ;员工数
        dw 3,7,9,13,28,38,130
        dw 220,476,778,1001,1442,2258,2793
        dw 4037,5635,8226,11542,14430,15257,17800
data ends
outstr segment
        ;年(3)  收入(12)  人数(23) 人均(31)
        db 16 dup (0)
outstr ends
code segment
start:        mov ax,data
        mov es,ax
        mov ax,outstr
        mov ds,ax
        mov si,0

        mov bl,0
        mov bh,2
        mov di,0
        mov cx,21
outlp:        mov al,4
        mul bl
        mov di,ax
        mov ax,es:[di]
        mov ds:[0],ax
        mov ax,es:[di+2]
        mov ds:[2],ax
        mov byte ptr ds:[4],0
        ;定位列
        mov dh,bh
        mov dl,3+10
        mov ax,cx
        mov cl,2
        ;显示
        call show_str
        mov cx,ax


        mov ax,es:[di+84]
        mov dx,es:[di+84+2]
        call ddtoc
        ;定位列
        mov dh,bh
        mov dl,12+10
        mov ax,cx
        mov cl,2
        ;显示
        call show_str
        mov cx,ax
        
        push di
        mov al,2
        mul bl
        mov di,ax
        mov ax,es:[di+168]
        mov dx,0
        call ddtoc
        ;定位列
        mov dh,bh
        mov dl,23+10
        mov ax,cx
        mov cl,2
        ;显示
        call show_str
        mov cx,ax

        mov si,di
        pop di
        mov ax,es:[di+84]
        mov dx,es:[di+84+2]
        mov di,si
        div word ptr es:[di+168]
        mov dx,0
        mov si,0
        call ddtoc
        ;定位列
        mov dh,bh
        mov dl,31+10
        mov ax,cx
        mov cl,2
        ;显示
        call show_str
        mov cx,ax
        
        inc bl
        inc bh
        dec cx
        jcxz th_over
        jmp near ptr outlp

th_over:mov ax,4c00h
        int 21h

;名称: ddtoc
;功能: 将dword型数据转变为表示十进制数的字符串,字符串以0为结束符.
;参数: (ax)低16位,(dx)高16位; ds:si指向字符串的首地址
;返回: 无
ddtoc:        push ax
        push bx
        push cx
        push dx
        push si
        ;压栈

        mov bx,0
t_st:        mov cx,10
        call divdw
        push cx
        inc bx
        mov cx,dx
        jcxz cklow        ;如果高位为0,则转去判断低位
        jmp short t_st
cklow:        mov cx,ax
        jcxz mk_str        ;判断低位
        jmp short t_st
mk_str:        mov cx,bx
mks1:        pop ax
        add ax,30h
        mov [si],ax
        inc si
        loop mks1
        mov byte ptr [si],0

        ;出栈
        pop si
        pop dx
        pop cx
        pop bx
        pop ax
        ret
        
;名称: divdw
;功能: 进行不会产生溢出的除法运算,被除数为dword型,除数为word型,结果为dword型。
;参数: (ax)=dword型数据的低16位;(dx)=dword型数据的高16位;(cx)=除数
;返回: (dx)=结果的高16位,(ax)=结果的低16位,(cx)=余数
divdw:        push bx
        ;压栈
        
        ;X/N=int(H/N)*65536 + [rem(H/N)*65536+L]/N
        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
;名称:show_str
;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串。
;参数:(dh)=行号(取值范围0~24),(dl)=列号(取值范围),(cl)=颜色,ds:si指向字符串的首地址
;返回:无
show_str:push ax
        push bx
        push cx
        push ds
        push es
        push si

        mov al,160
        mul dh
        mov bx,ax
        mov al,2
        mul dl
        add bx,ax        ;算出要显示的起始位置
        
        mov ax,0b800h
        mov es,ax        ;设置显存位置
        mov ah,cl        ;设置颜色
show1:        mov ch,0
        mov cl,ds:[si]
        jcxz over_l
        mov al,cl
        mov es:[bx],ax
        inc si
        add bx,2
        jmp show1

over_l:        pop si
        pop es
        pop dx
        pop cx
        pop bx
        pop ax
        ret
code ends
end start
评论次数(3)  |  浏览次数(644)  |  类型(汇编作业) |  收藏此文  | 

[  tomato   发表于  2011-09-06 09:08  ]

怎么一上来就是第10章来?

[  landyking   发表于  2011-09-06 19:08  ]

to tomato:
书看了一半多了,才知道有这个论坛.所以就贴了个刚刚做的代码.

[  tomato   发表于  2011-09-08 19:44  ]

哦。原来如此。

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码