. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验一,这样算不算通过(显示第二、三列数据用了重复代码)  [待解决] 回复[ 0次 ]   点击[ 216次 ]  
hello123rtt
[帖 主]   [ 发表时间:2019-12-02 20:54 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2019-12-02 20:44
assume cs:code

data segment
        db '1975','1976','1977','1978'
        db '1979','1980','1981','1982'
        db '1983','1984','1985','1986'
        db '1987','1988','1989','1990'
        db '1991','1992','1993','1994'
        db '1995',0,0,0,0,0,0,0,0,0,0,0,0
        dd  16,22,382,1356
        dd  2390,8000,16000,24486
        dd  50065,97479,140417,197514
        dd  345980,590827,803530,1183000
        dd  1843000,2759000,3753000,4649000
        dd  5937000,0,0,0
        dd  3324432,7344,9,13
        dd  28,38,130,220
        dd  476,778,1001,1442
        dd  2258,2793,4037,5635
        dd  8226,11542,14430,15257
        dd  17800,0,0,0
        dd  5,3,42,104
        dd  85,210,123,111
        dd  105,125,140,136
        dd  153,211,199,209
        dd  224,239,260,304
        dd  333,0,0,0
table segment
        db  '0000000000',0
table ends
        
data ends

stack segment
        db 128 dup(0)
stack ends

code segment

start:         mov ax,stack
                mov ss,ax
                mov sp,128
                
                
                
                call show_word_str
                
                        
                        
                        
                        
                        mov cx,21
                        mov di,9
                        mov bx,60h
                        mov si,160*4+10*2
                        
                        
        
                
        s:                call init
                        push bx
                        push di
                        push si
                        push cx
        ;---------------------------显示第一列数据--------------------------
                                        
        
        
        
        S3: call divdw
                add cl,30h
                mov es:[di],cl
                mov cx,ax
                jcxz show_str;最后商ax为0时,跳出,此时di就是数字的最高位,所以di的值与数值的相应位数一致。
                dec di                                                
                jmp short s3
                        
                                        show_str:        mov ax,0b800h
                                                                mov es,ax
                                                                mov ax,table
                                                                mov ds,ax
                
                
                                                                
                                                s1:                
                                                                mov cl,ds:[di]
                                                                jcxz t_loop
                                                                mov es:[si],cl
                                                                mov byte ptr es:[si+1],00000010B
                                                                add si,2
                                                                inc di
                                                                jmp short s1
                                                                
                                                                
                ;--------------------------------显示年份------------------------------------------------
                                                            show_word_str:                                mov ax,data
                                                                                                        mov ds,ax
                                                                                                        mov ax,0B800h
                                                                                                        mov es,ax
                                                                                                        mov cx,21
                                                                                                        mov bx,0
                                                                                                        mov si,160*4+4
                                                                                                        mov dx,0
                                                                                                        
                                                                                                s4:        push cx
                                                                                                        push si
                                                                                                        
                                                                                                        mov cx, 4
                                                                                                s5:        
                                                                                                        mov dl,ds:[bx]
                                                                                                        mov es:[si],dl
                                                                                                        mov byte ptr es:[si+1],00000010B
                                                                                                        
                                                                                                        add si,2
                                                                                                        inc bx
                                                                                                        loop s5
                                                                                                        pop si
                                                                                                        pop cx
                                                                                                        add si,160
                                                                                                        loop s4
                                                                                                        ret
                                                                                                                                        
                
        ;---------------------------------------------------        
        
                
                                
                                        
        
                        
        t_loop: pop cx
                        pop si
                        pop di
                        pop bx
                        add bx,4
                        add si,160
                        loop s
                        
;---------------------------显示第二列数据------------------------------

        mov cx,21
        mov di,9
        mov bx,192
        mov si,160*4+10*4
        
        
s_two:        call init
                push bx
                push di
                push si
                push cx        
                
                div_tow:        call divdw
                                        add cl,30h
                                        mov es:[di],cl
                                        mov cx,ax
                                        jcxz show_str_two
                                        dec di
                                        jmp short div_tow
                                show_str_two:        mov ax,0b800h
                                                                mov es,ax
                                                                mov ax,table
                                                                mov ds,ax
                
                                                                
                                                s1_two:                
                                                                mov cl,ds:[di]
                                                                jcxz t_loop_two
                                                                mov es:[si],cl
                                                                mov byte ptr es:[si+1],00000010B
                                                                add si,2
                                                                inc di
                                                                jmp short s1_two

t_loop_two: pop cx
                        pop si
                        pop di
                        pop bx
                        add bx,4
                        add si,160
                        loop s_two
;-----------------------------------显示第三列数据------------------------------------------------------
        mov cx,21
        mov di,9
        mov bx,288
        mov si,160*4+10*6
        
        
s_three:call init
                push bx
                push di
                push si
                push cx        
                
                div_three:        call divdw
                                        add cl,30h
                                        mov es:[di],cl
                                        mov cx,ax
                                        jcxz show_str_three
                                        dec di
                                        jmp short div_three
                                show_str_three:        mov ax,0b800h
                                                                mov es,ax
                                                                mov ax,table
                                                                mov ds,ax
                
                                                                
                                                s1_three:                
                                                                mov cl,ds:[di]
                                                                jcxz t_loop_three
                                                                mov es:[si],cl
                                                                mov byte ptr es:[si+1],00000010B
                                                                add si,2
                                                                inc di
                                                                jmp short s1_three

t_loop_three: pop cx
                        pop si
                        pop di
                        pop bx
                        add bx,4
                        add si,160
                        loop s_three
                        
                        
                
        ok:        mov ax,4c00h
                int 21h
                
                
                
                
        
                                
                                
                
        
                        
        ;------------------------每一步除法求得一个余数cx-----------------------
        divdw:                push ax
                                mov ax,dx
                                mov dx,0
                                mov cx,10
                                div cx
                                
                                mov bx,ax
                                pop ax
                                div cx
                                mov cx,dx
                                mov dx,bx
                                ret
        ;------------------------------------------------
                init:        mov ax,data
                                mov ds,ax
                                mov ax,table
                                mov es,ax                
                                mov ax,ds:[bx]
                                mov dx,ds:[bx+2]
                                ret
        ;------------------------------------------
        
                                                        
                                                
                                                
                                        
code ends
end start
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved