. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  完成课程设计1,留名  [待解决] 回复[ 1次 ]   点击[ 241次 ]  
wxc
[帖 主]   [ 发表时间:2019-05-09 15:54 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2019-05-08 16:38
assume cs:codesg,ds:data,ss:stack 
data segment 
                    dw 1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,0
        dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
        dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000,0
        dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226,11542,14430,15257,17800,0;以上是表示21年公司雇员人数的21个word型数据
        dw 5,3,42,104,85,210,123,111,105,125,140,136,153,211,199,209,224,239,260,304,333,0
        db 200 dup(0)
data ends 
stack segment 
    db 96 dup(0)
stack ends 
codesg segment 
  start:          
                                                                    mov bx,stack
                                                                    mov ss,bx
                                                                    mov sp,60h
                                                         mov bx,data
                                                         mov ds,bx
                                                         mov si,0
                                                         mov bx,0
                                                         mov dx,0
                                                         mov cx,0
                                                         mov ax,0
                                                         
                                                         call dtoc
                                                                  
                                                   mov bp,0
                                                   mov si,0 
                                                   
                                                   mov dh,1   ;行号
               s1:                          mov dl,1   ;列号
                                                         
                                                   mov cl,2   ;颜色
                                                   
                                                         call show_str
                                                         mov cx,21  ;排列21个数
                                                         inc bp
                                                         sub cx,bp
                                                         jcxz s2
                                                         inc dh
                                                         jmp s1
                                
                                s2:                 
                                       mov bx,44
                                       call dtocm
                                
                                             mov bp,0
                                                   mov si,0 
                                                   
                                                   mov dh,1   ;行号
               s3:                          mov dl,11  ;列号
                                                         
                                                   mov cl,2   ;颜色
                                                   
                                                         call show_str
                                                         mov cx,21  ;排列21个数
                                                         inc bp
                                                         sub cx,bp
                                                         jcxz s4
                                                         inc dh
                                                         jmp s3
                                                         
                        s4:                         
                                 mov bx,132
                                             call dtoc
                                                                  
                                                   mov bp,0
                                                   mov si,0 
                                                   
                                                   mov dh,1   ;行号
               s5:                          mov dl,21  ;列号
                                                         
                                                   mov cl,2   ;颜色
                                                   
                                                         call show_str
                                                         mov cx,21  ;排列21个数
                                                         inc bp
                                                         sub cx,bp
                                                         jcxz s6
                                                         inc dh
                                                         jmp s5
              s6:
                          mov bx,176
                                             call dtoc
                                                                  
                                                   mov bp,0
                                                   mov si,0 
                                                   
                                                   mov dh,1   ;行号
               s7:                          mov dl,31  ;列号
                                                         
                                                   mov cl,2   ;颜色
                                                   
                                                         call show_str
                                                         mov cx,21  ;排列21个数
                                                         inc bp
                                                         sub cx,bp
                                                         jcxz s8
                                                         inc dh
                                                         jmp s7
              s8:
                                                         mov ax,4c00h 
                   int 21h 
                
      dtocm    :   
                   push si
                                                       push cx
                                                       mov si,0
                                                         mov dx,0
                                                         mov cx,0
                                                         mov ax,0
                                                         mov bp,0          ;初始化
     dtoc2m    :          
                                                              mov ax,ds:[bx]    ;把第一个数低位付给ax
                                                 mov dx,ds:[bx+2]  ;把第一个数高位位付给dx
                                           
                                           
    dtoc3m    :    mov cx,10         ;除数为10
                                           call divdw
                                           add cl,30h        ;余数低位+30h输出数字
                                           push cx           ;存入数字
                                           mov cx,ax         
                                           jcxz dt1m          ;把商的低位给cx,为0则跳dt1,否则继续
                                           inc bp            ;bp记录有多少个数字
                                           jmp dtoc3m        ;跳dtoc3不断转换数字
       dt1m:                                    
                                           mov cx,dx         ;把商的高位给dx,为0则跳OK2,否则继续
                                           jcxz ok2m
                                           inc bp            ;bp记录有多少个数字
                                           jmp dtoc3m        ;跳dtoc3不断转换数字
                                           
          ok2m:     inc bp            ;bp+1才是转换的数字的字节
                   
          ok3m:
                                           pop cx             ;取出存入的cx值,倒着读余数
                                           mov byte ptr [si+140h],cl ;cx低字节,余数存入ds:10h地址
                                           sub bp,1            ;bp-1少了一个转换字节
                                           mov cx,bp           ;bp赋给cx
                                           jcxz ok4m            ;转换完则跳ok4,否则继续执行
                                           inc si              ;下个地址
                                           jmp ok3m       
                                           
         ok4m:                  
                   inc si              
                                                  mov byte ptr [si+140h],20h ;空一格
                                                  inc bx
                   inc bx
                   inc bx
                   inc bx
                   mov cx,[bx]      ;第二个dd数低位看是否为零,
                   jcxz ok5m         ;等于零则跳ok5,不等则继续读下个数
                   inc si
                   mov bp,0         ;bp清零,si+1存入下个字节
                   jmp dtoc2m
      ok5m:             
                   mov cx,[bx+2]    ;第二个dd数高位看是否为零,
                   jcxz ok6m         ;等于零则跳ok6,不等则继续读下个数
                   inc si
                   mov bp,0         ;bp清零,si+1存入下个字节
                   jmp dtoc2m
                   
       ok6m:       pop cx
                                      pop si
                                      ret 
                                           
                         
               dtoc :     
                   push si
                                                       push cx
                                                       mov si,0
                                                         mov dx,0
                                                         mov cx,0
                                                         mov ax,0
                                                         mov bp,0   
                                                       
     dtoc2    :          
                                                              mov ax,ds:[bx]
                                                 mov dx,0
                                           
                                           
    dtoc3    :     mov cx,10
                                           call divdw
                                           add cl,30h
                                           push cx
                                           mov cx,ax
                                           jcxz ok2
                                           inc bp
                                           jmp dtoc3 
                                           
          ok2:     inc bp
                  
          ok3:
                                           pop cx
                                           mov byte ptr [si+140h],cl
                                           sub bp,1
                                           mov cx,bp
                                           jcxz ok4
                                           inc si
                                           jmp ok3
                                           
         ok4:                  
                   inc si
                                                  mov byte ptr [si+140h],20h
                                                  inc bx
                   inc bx
                   mov cx,[bx]
                   jcxz ok5
                   inc si
                   mov bp,0
                   jmp dtoc2
                   
       ok5:        pop cx
                                      pop si
                                      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
                               
       show_str:   
                                                       push cx       ;保存cx值
                   mov  bx,0
                   mov  ax,0B800H
                                                                    mov  es,ax
                                                                    
                                                 mov  al,dh    
                                                                    sub  al,1     ;al=(dh-1)
                                                                    mov  bl,0A0H
                                                                    mul  bl       ;ax=(dh-1)*A0
                                                                    add  bx,ax    ;BX=(dh-1)*A0
                                                                    push bx       ;存bx值
                                                                    mov  al,dl    
                                                                    sub  al,1   ;al=(dl-1)
                                                                    mov  bl,2
                                                                    mul  bl       ;ax=(dl-1)*2
                                                                    pop  bx       ;取出第一个bx值
                                                                    add  bx,ax    ;bx=(dh-1)*A0+(dl-1)*2
                                                                   
                                                                    
           show_str2:                
                                                                    mov  cl,[si+140h] ;把ds:[si+60h]赋给cl
                                                                    sub  cl,20h
                   mov  ch,0
                                                                    jcxz  ok         ;cx=0则结束转换,否则继续执行
                                                                    mov  al,[si+140h] ;把ds:[si+60h]赋给al
                                                                    mov  ah,0
                                                                    mov  es:[bx],al  ;把al的值存到显存中
                                                                    pop  cx          ;取出cx值
                   mov  ch,0         
                                                                    mov  byte ptr es:[bx+1],cl ;cl值赋予颜色
                                                                    push cx          ;保存cx值
                                                                    inc bx
                                                                    inc bx           ;指向显存下个地址
                                                                    inc si           ;下个要转换的字节
                                                                    jmp show_str2
                                                   
                           ok:        
                                      inc si       ;跳过空格
                                      pop cx
                                      ret
                                      
codesg ends 
end start
tom7370
[第1楼]   [ 回复时间:2019-05-11 17:24 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2019-01-26 11:46
这东西我做了几个星期了,刚刚做完。刚来逛逛网站,没想到碰到了这篇文章。
不过你是5月8号注册的诶,是刚遇到这个网吗?
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved