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

我的博客

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

[2009-08-18 13:06] 课题设计一

assume cs:codesg,ds:data

data segment 

    ;表示21年的21个字符串 
    db '1975','1976','1977','1978','1979','1980','1981','1982','1983' 
    db '1984','1985','1983','1987','1988','1989','1990','1991','1992' 
    db '1993','1994','1995' 

    ;表示21年公司总收入的21个dword型数据 
    dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514 
    dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 

    ;表示21年公司雇员人数的21个word型数据 
    dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226 
    dw 11542,14430,15257,17800 
         
data ends

temp segment                ;临时内存
        db 16 dup(0)
temp ends


codesg segment
start:                ;程序开始处
                        mov ax,data
                        mov es,ax
                
                        mov ax,temp
                        mov ds,ax
                        
                        
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;显示时间                        
                        
                        mov si,0 
                        mov bx,0
                        mov dh,0
        
                        mov cx,21
start_s1:        
                        push cx
                        push dx
                        mov cx,4
start_s2:        
                        mov al,es:[bx+si]
                        mov ds:[si],al
                        inc si
                        loop start_s2
                        sub si,si
                        
                        pop dx
                        inc dh
                        mov cl,2
                        mov dl,23
                        call show_str ;调用show_str函数
                        
                        add bx,4
                        pop cx
                        loop start_s1 
                        
                        
                        
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;显示公司总收入

                        mov bx,0
                        mov si,0 
                        
                        mov dh,0
                        mov cx,21
start_s3:                
                        push cx
                        push dx
                        mov ax,es:[bx+54h]
                        mov dx,es:[bx+56h]
                        call wdtoc

                        pop dx
                        inc dh 
                        mov cl,2
                        mov dl,33
                        call show_str ;调用show_str函数

                        add bx,2
                        pop cx
                        loop start_s3
                        
                        
                        
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;显示公司雇员人数

                        mov bx,0
                        mov si,0 
                        
                        mov dh,0
                        mov cx,21
start_s4:                
                        push cx
                        push dx
                        mov ax,es:[0a8h+bx]
                        call dtoc

                        pop dx
                        inc dh 
                        mov cl,2
                        mov dl,43
                        call show_str ;调用show_str函数

                        add bx,2
                        pop cx
                        loop start_s4
                        
                        
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;显示人均收入 

                        mov bx,0
                        mov si,0 
                        mov di,0
                        
                        mov dh,0
                        mov cx,21
start_s5:
                        push cx
                        push dx
                        ;人均收入 
                        mov ax,es:[bx+54h]
                        mov dx,es:[bx+56h] 
                        div word ptr es:[di+0a8h] 
                        call dtoc
                        
                        pop dx
                        inc dh 
                        mov cl,2
                        mov dl,53
                        call show_str ;调用show_str函数

                        add bx,4
                        add di,2
                        pop cx
                        loop start_s5
                        
                        
                        
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;        

s9:
                        mov cx,10    ;无限循环,暂屏看效果用 
                        nop 
                        nop 
                        loop s9
                
                        mov ax,4c00h
                        int 21h

                        
                                        
                        
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                        
                                
                        
                show_str:;显示字符串函数
                         push ax
                         push es
                         push dx
                         push di
                         push si
                         push cx
                         push ds                ;保存子过程要用到的寄存器
                     
                         mov ax,0B800h
                         mov es,ax                ;显存段地址
                         
                         dec dh
                         mov al,0a0h
                         mul dh
                         mov di,ax                ;行定位
                         
                         dec dl
                         mov al,2
                         mul dl
                         add di,ax                ;列定位
                         
                         mov ah,cl
                         
                ss_s:mov cl,ds:[si]
                         mov ch,0
                         jcxz ss_ok
                         mov al,ds:[si]
                         mov es:[di],al
                         mov es:[di+1],ah
                         inc si
                         add di,2
                         jmp short ss_s        ;字符串复制
                         
                ss_ok:         pop ds
                                 pop cx
                                 pop si
                                 pop di
                                 pop dx
                                 pop es
                                 pop ax                   ;恢复寄存器
                                 ret        
                         
                         
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                
                        
                dtoc:  ;数值显示的子程序定义
                        push dx
                        push cx
                        push ax
                        push si
                        push bx
                        push ds
                    
                    
                        mov bx,0        ;用bx计数
                dt_s1:  
                        mov cx,10d
                        mov dx,0
                        div cx        
                        mov cx,ax
                        jcxz dt_s2
                        add dx,30h
                        push dx
                        inc bx
                        jmp short dt_s1

                dt_s2:  
                        add dx,30h
                        push dx
                        inc bx  
                      
                        mov cx,bx
                        mov si,0
                dt_s3:  
                        pop ax                ;存放到ds:si内存当中
                        mov [si],al
                        inc si
                        loop dt_s3
                        mov byte ptr [si],0
                dt_ok1:
                        pop ds         
                        pop bx
                        pop si
                        pop ax
                        pop cx
                        pop dx
                        ret   
                        
                        
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                 
  wdtoc:;转换十进制字符串
        push dx
        push cx
        push ax
        push si
        push bx
        
        mov bx,0        ;用bx计数
wdt_s1: mov cx,10d
        call divdw        
        mov cx,ax
        jcxz wdt_s2
        add cx,30h
        push cx
        inc bx
        jmp short wdt_s1

wdt_s2: add cx,30h
        push cx
        inc bx
            
        mov cx,bx
        mov si,0
wdt_s3: pop ax                ;存放到ds:si内存当中
        mov [si],al
        inc si
        loop wdt_s3

wdt_ok1:pop bx
        pop si
        pop ax
        pop cx
        pop dx
        ret   
                
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;        

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                  
                          
divdw:  ;防止除法溢出的除法
        push ax
        mov ax,dx
        mov dx,0
        div cx
        mov bx,ax
        pop ax
        div cx
        mov cx,dx
        mov dx,bx
        ret 


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

codesg ends

end start
评论次数(1)  |  浏览次数(475)  |  类型(汇编作业) |  收藏此文  | 

[  游客   发表于  2009-08-19 09:31  ]

你的程序还是有问题,不能正常运行的。
问题应该是出在显示公司总收入哪里。你自己在检查一下。

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