汇编代码,将data段内的数据转入table段并且以表格显示table段的内容,为什么只可以显示出表格的"1975"这个左上角的一项,其他数字都不显示呢
assume cs:codesg,ds:data,es:table
data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
db '1993','1994','1995'
dd 16,22,383,21,234,234234,3452,342564,436435,345,46346,352,453,65457,4652,34532,345436,655777,454300,354350,3456000 ;鍙屽瓧鍨�
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2783,4037,5635,8226,11542,1143,15257,17800 ;鍗曞瓧鍨�
data ends
stack segment
db 128 dup(0)
stack ends
table segment
db 21 dup('year summ ne ?? ')
table ends
line segment
db 16 dup(0) ;year summ ne ??
db 8 dup(0) ;dhdlcl,,,,,
line ends
;es:[di]指向line,ds:[si]指向显示缓冲区
codesg segment
start: ;涓荤▼搴�
mov ax,stack
mov ss,ax
mov sp,128
mov ax,data
mov ds,ax
mov si,0
mov ax,table
mov es,ax
mov bp,0
mov di,0
mov cx,21
call ToTable
mov ax,table
mov ds,ax
mov si,0
mov cx,21
mov ax,line
mov es,ax
mov di,0
mov byte ptr es:[10H],03H
mov byte ptr es:[11H],05H
mov byte ptr es:[12H],00000010b
call showTable
mov ax,4c00h
int 21h
;涓荤▼搴忕粨鏉�
;func:ToTable
;args:
;ds:[si] 鍘熷湴鍧€(word si double di) es:[bp] 琛ㄥ湴鍧€ cx: 琛ㄨ�屾暟
ToTable:
push cx
push bp
push si
push di
ToTableLoop:
mov ax,ds:[si]
mov es:[bp],ax
mov ax,ds:[si+2]
mov es:[bp+2],ax
mov ax,ds:[si+84]
mov es:[bp+5],ax
mov ax,ds:[si+84+2]
mov es:[bp+5+2],ax
mov ax,es:[di+168]
mov es:[bp+10],ax
mov dx,ds:[si+84+2]
mov ax,ds:[si+84]
div word ptr es:[bp+10]
mov es:[bp+13],ax
add bp,16
add si,4
add di,2
loop ToTableLoop
pop di
pop si
pop bp
pop cx
ret
;~func:ToTable
;func:showTable
;args:
;ds:[si] 表地址 cx 行数
showTable:
push si
push di
push ax
showTableLoop:
mov word ptr ax,ds:[si]
mov word ptr es:[di],ax
add si,2
add di,2
mov word ptr ax,ds:[si]
mov word ptr es:[di],ax
add di,2
add si,3
mov byte ptr es:[di],0;结束符
inc di
mov word ptr ax,ds:[si]
mov word ptr es:[di],ax
add si,2
add di,2
mov word ptr ax,ds:[si]
mov word ptr es:[di],ax
add di,2
add si,3
mov byte ptr es:[di],0;结束符
inc di
mov word ptr ax,ds:[si]
mov word ptr es:[di],ax
add di,2
add si,3
mov byte ptr es:[di],0;结束符
inc di
mov word ptr ax,ds:[si]
mov word ptr es:[di],ax
add di,2
add si,3
mov byte ptr es:[di],0;结束符
inc di
mov dh,es:[10H]
call showLine
inc dh
loop showTableLoop
pop ax
pop di
pop si
ret
;~func:showTable
;func:showLine
;args:
;es:[di] 行地址 ;ds:[si] 表地址
showLine:
push di
push dx
push cx
push ax
mov dl,es:[11H]
mov cl,es:[12H]
mov di,0
call showStr
add di,5
add dl,10
push dx
mov ax,es:[di]
mov dx,es:[di+2]
call dwtoc
pop dx
call showStr
add di,5
add dl,10
push dx
mov ax,es:[di]
mov dx,0
call dwtoc
pop dx
call showStr
add di,3
add dl,10
push dx
mov ax,es:[di]
mov dx,0
call dwtoc
pop dx
call showStr
; add di,3
; call showStr
pop ax
pop cx
pop dx
pop di
ret
;~func:showLine
;func:showStr
;args:
;es:[di] 地址 读到0为止 dh 行 dl 列 cl 颜色
showStr:
push di
push ds
push si
push ax
mov ax,0b800h
mov ds,ax
mov al,dh
mov ah,160
mul ah
mov si,ax
mov al,dl
mov ah,2
mul ah
add si,ax
showStrLoop:
push cx
mov cl,es:[di]
mov ch,0
jcxz showStrEnd
mov ds:[si],cl
pop cx
mov ds:[si+1],cl
inc di
add si,2
jmp short showStrLoop
showStrEnd:
pop ax
pop si
pop ds
pop di
ret
;~func:showStr
;func:dwtoc
;args:
;es:[di] 双字地址 ax 低位 dx 高位
dwtoc:
push di
push cx
push ax
push dx
push bx
mov bx,0
dwtocLoop:
call divdw
push cx
inc bx
mov cx,ax
add cx,dx
jcxz dwtocPop
jmp short dwtocLoop
dwtocPop:
pop cx
mov es:[di],cl
inc di
dec bx
mov cx,bx
jcxz dwtocEnd
jmp short dwtocPop
dwtocEnd:
mov byte ptr es:[di],0
pop bx
pop dx
pop ax
pop cx
pop di
ret
;~func:dwtoc
;func:divdw
;args:
;ax 浣庡叓浣� dx 楂樺叓浣� cx (浣欐暟)
divdw:
push ax
push dx
push cx
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
pop cx
pop dx
pop ax
ret
;~func:divdw
codesg ends
end start