王爽 的汇编课程设计1怎么显示有点不正确
王爽 的汇编课程设计1怎么显示有点不正确
下面是我的代码
assume cs:codesg
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,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,8826
dw 11542,14430,15257,17800
data ends
str0 segment
db 28 dup (0)
str0 ends
codesg segment
start: mov ax,data
mov es,ax ; es全局变量下同
mov ax,str0
mov ds,ax;ds
mov dx,0;dx
mov cx,21 ;cx循环21次,每次显示一行
mov si,0;si
mov di,0;di
mov bp,16
s: push cx
push dx
mov ax,es:[si]
mov dx,es:2[si] ;dx!o(o为全局变量已保护,下同)
mov [di],ax
mov 2[di],dx
push si
mov ax,es:168[bp]
mov dx,0 ;dx!o
mov si,16 ;si!o
call dtoc
pop si
mov ax,es:84[si]
mov dx,es:86[si] ;dx!o
push si
mov si,5 ;si!o
call dtoc
mov bx,es:168[bp]
div bx ;使用上方AX,DX
mov dx,0
mov si,22;si!o
call dtoc
pop si
pop dx
push si
mov dl,0
mov cl,2 ;cx!o
mov si,0 ;si!o
call show_str
mov dl,9
mov si,5 ;si!o
call show_str
mov dl,23
mov si,16 ;si!o
call show_str
mov dl,38
mov si,22 ;si!o
call show_str
pop si
pop cx
inc dh
add si,4
add bp,2
loop s
mov ax,4c00h
int 21h
dtoc: push ax ;将数据转换为字符串,dd型数据
push bx
push cx
push dx
push di
push si
mov di,0
step1: mov cx,dx
jcxz lowbyte
mov bx,10
call divdw
push bx
inc di
jmp short step1
lowbyte:
mov bx,10
call divdw
push bx
inc di
mov cx,ax
jcxz di2cx
jmp short lowbyte
di2cx: mov cx,di
step2: pop bx
add bx,30h
mov [si],bx
inc si
loop step2
finish: pop si
pop di
pop dx
pop cx
pop bx
pop ax
ret
divdw: ;除法子程序,防溢出
push cx
push ax
mov ax,dx
mov dx,0
div bx
mov cx,ax
pop ax
div bx
mov bx,dx
mov dx,cx
pop cx
ret
show_str: push ax ;显示字符串,字符串后以数据0结尾
push bx
push cx
push dx
push es
push si
push di
mov al,0a0h
mul dh
mov dh,0
add dl,dl
add ax,dx
mov di,ax
mov ax,0b800h
mov es,ax
mov bl,cl
display:mov cl,[si]
mov ch,0
jcxz fin
mov es:[di],cl
mov es:1[di],bl
add di,2
inc si
jmp short display
fin: pop di
pop si
pop es
pop dx
pop cx
pop bx
pop ax
ret
codesg ends
end start
那位大虾帮我修改一下 我不胜感激 有什么错误给我指正一下