荣誉值: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 | | |