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

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  

[2008-09-16 17:37] 课程1两种实现方法

assume cs:code
data segment
     db '1975','1976','1977','1978','1979','1980','1981','1982','1983','1984','1985','1986','1987','1988'
     db '1989','1990','1991','1992','1993','1994','1995' ;年份
     
     dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
     dd 345980,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
     dw 11542,14430,15257,17800 ;人数
     
data ends
table segment
     db 105 dup(0)
     db 231 dup(0)
     db 126 dup(0)
     db 126 dup(0)
table ends
code segment
     start:mov ax,data
           mov ds,ax
           mov ax,table
           mov es,ax
           mov bx,0  ;代表data段数的基址
           mov si,0   ;table段基址
          
           mov cx,21
         s1:mov ax,[bx]  ;把年份传到table段中,使其每个年后加0
            mov es:[bx][si],ax
            mov ax,[bx+2]
            mov es:[bx].2[si],ax
            inc si
            add bx,4
            loop s1
           
           mov si,105 ;收入传入table段
           mov bx,84
           mov cx,21
         s2:mov ax,[bx]
            mov dx,[bx+2]
            call dtoc
            add si,11
            add bx,4
            loop s2
          
          mov si,336 ;人数传入table段
          mov bx,168
          mov cx,21
         s3:mov ax,[bx]
            mov dx,0
            call dtoc
            add si,6
            add bx,2
            loop s3
           
          mov si,462 ;算出商传入table段
          mov cx,21
          mov bx,0
          mov di,0
         s4:push cx
         mov ax,[bx].84
            mov dx,[bx].86
            mov cx,[di].168
            call divdw
            
            call dtoc
            add bx,4
            add di,2
            add si,6
            pop cx
            loop s4
  
           mov cx,21
           mov si,0
           mov dh,3
       s5: push cx
           
           mov dl,3
           mov cl,2
           call show_str
           inc dh
           add si,5
           pop cx
           loop s5
           
           mov cx,21
           mov si,105
           mov dh,3
       s6: push cx
      
           mov dl,23
           mov cl,2
           call show_str
           inc dh
           add si,11
           pop cx
           loop s6
           
           mov cx,21
           mov si,336
           mov dh,3
           
       s7: push cx
          
           mov dl,49
           mov cl,2
           call show_str
           inc dh
           add si,6
           pop cx
           loop s7
           
           mov cx,21
           mov si,462
           mov dh,3
       s8: push cx
          
           mov dl,70
           mov cl,2
           call show_str
           inc dh
           add si,6
           pop cx
           loop s8
           
           mov ax,4c00h
           int 21h
           
       show_str:           ;输出字符子程序
           push ds
           push es
           push cx
           push bx
           push dx
           push si
           push di
           
           mov ax,table
           mov ds,ax
           mov ax,0b800h
           mov es,ax
           mov bx,0
           mov al,160
           mul dh
           mov bx,ax
           mov al,2
           mul dl
           add bx,ax
           mov dl,cl
           mov di,0
           
        s9:mov cl,[si]
           mov ch,0
           jcxz sss
           mov al,[si]
           mov es:[bx+di],al
           mov es:[bx+di+1],dl
           inc si
           add di,2
           jmp short s9
       
       sss:pop di
           pop si
           pop dx
           pop bx
           pop cx
           pop es
           pop ds
           ret
            dtoc:           ;变字符子程序
              push cx
              push bx
              push dx
              push si
              push di
              
            
              
              mov di,0
           char:inc di
               mov cx,10
               call divdw ;提供ax,dx,cx值代入子程序
               add cx,30h
               push cx
               mov bx,ax
               or ax,dx
               mov cx,ax
               mov ax,bx
               jcxz ok
               jmp short char
               
           ok:mov cx,di
           ok1:pop es:[si]
               inc si
               loop ok1
               pop di
               pop si
               pop dx
               pop bx
               pop cx
               ret
          
          divdw:
               push bx               ;除法运算
               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
           
    
           
                      
                        第一种
评论次数(1)  |  浏览次数(450)  |  类型(作业) |  收藏此文  | 

[  fenglixin70953   发表于  2008-09-16 17:38  ]

assume cs:code
data segment
     db '1975','1976','1977','1978','1979','1980','1981','1982','1983','1984','1985','1986','1987','1988','1989','1990'
     db '1991','1992','1993','1994','1995' ;年份
     dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514,345980,590827,803530,1183000,184300
     dd 2759000,3753000,4649000,5937000 ;收入
     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
stack segment
     dw 10h dup(0)
stack ends
code segment
      start:mov ax,data
            mov ds,ax
            mov ax,stack
            mov ss,ax
            mov sp,20h
            mov ax,0b800h
            mov es,ax
            
            mov si,0    
            mov dh,3    ;在哪行显示
            mov dl,4    ;在哪列显示
            call bp_value  ;计算输出显示器上的位置bp
            mov cx,21
          s:push cx
            mov cl,0f1h
            call show_str   ;调用子程序显示年份
            add bp,160
            add si,4
            pop cx
            loop s
            
            mov si,84
            mov dh,3  ;行
            mov dl,14 ;列
            call bp_value ;算出位置
            mov cx,21
          s1:push cx
            mov cl,2h
            mov ax,[si]     ;数据传递
            mov dx,[si+2]
            call dtoc       ;调用子程序显示收入
            add bp,160
            add si,4
            pop cx
            loop s1
            
            mov si,168
            mov dh,3
            mov dl,34
            call bp_value
            mov cx,21
          s2:push cx
            mov cl,41h
            mov ax,[si]
            mov dx,0
            call dtoc         ;显示人数
            add bp,160
            add si,2
            pop cx
            loop s2
            
            mov si,84
            mov di,168
            mov dh,3
            mov dl,54
            call bp_value
            mov cx,21
          s3:push cx
            mov ax,[si]
            mov dx,[si+2]
            mov cx,[di]
            call divdw   ;求商
            mov cl,2h  ;设置色
            call dtoc         ;显示商   
            add bp,160
            add si,4
            add di,2
            pop cx
            loop s3
            
            mov ax,4c00h
            int 21h
            
         ;以下是子程序
         bp_value:push bx
                  push ax        
                  mov al,160
                  mul dh
                  mov bx,ax
                  mov al,2
                  mul dl
                  add bx,ax
                  mov bp,bx
                  pop ax
                  pop bx
                  ret  ;计算bp显示位置子程序
                  
          show_str:push bp
                   push si
                   push cx
                   mov dl,cl
                   mov cx,4
               s4: mov al,[si]
                   mov es:[bp],al
                   mov es:[bp+1],dl
                   add bp,2
                   inc si
                   loop s4
                   pop cx
                   pop si
                   pop bp
                   ret                  ;显示年份子程序
                   
          divdw: push bx
                 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           ;无溢出除法
          
          dtoc:push si
               push bp
               push bx
               push di
               push cx
               mov si,cx
               
               mov di,0
           s5: inc di
               mov cx,10
               call divdw
               add cx,30h
               push cx
               mov bx,ax
               or ax,dx
               mov cx,ax
               
               jcxz ok
               mov ax,bx
               jmp short s5
               
            ok: mov cx,di
                mov dx,si
             s6:pop ax
                mov es:[bp],al
                mov es:[bp+1],dl
                add bp,2
                loop s6
                
                pop cx
                pop di
                pop bx
                pop bp
                pop si
                ret
                
                code ends
                end start

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