|
主题 : : 求救 [待解决] |
回复[ 1次 ]
点击[ 483次 ] | |
荣誉值:0
信誉值:0
注册日期:2007-09-29 20:49 |
我写的程序,但一执行到DTOC段PUSH SI的下一条指令 就出遇到无效指令 CS:0000 IP:0077 OP:F0 37 05 0A 02选择"关闭"终止应用程序.这是怎么回事,请教高手
assume cs:code
data segment
dd 197585,197685,197785,198085
data ends
talk segment
dw 16 dup(0)
talk ends
stack segment
dw 16 dup(0)
stack ends
code segment
start:mov ax,data
mov es,ax
mov ax,talk
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,16
mov si,0
mov bh,2
mov bl,2
mov cx,4
liang:mov ax,es:[si]
mov dx,es:[si+2]
call dtoc
mov dh,bh
mov dl,bl
mov cl,7
call show_str
add si,4
inc bh
pop cx
loop liang
mov ax,4c00h
int 21h
dtoc:push bx
push ax
push dx
push cx
push si
s0:mov cx,10
call divdw
mov bx,cx
mov cx,ax
add bx,30h
push bx
inc di
jcxz s1
jmp short s0
s1:mov cx,di
s2:pop bx
mov ds:[si],bl
inc si
loop s2
ok0:pop di
pop si
pop cx
pop dx
pop ax
pop bx
ret
show_str:push bx
push es
push cx
push si
mov ax,0b800h
mov es,ax
mov ax,0
mov al,160
mul dh
mov bx,ax
mov ax,0
mov al,2
mul dl
add bx,ax
mov al,cl
s:mov cl,ds:[si]
mov ch,0
jcxz ok1
mov ch,al
mov word ptr es:[bx],cx
inc si
add bx,2
jmp short s
ok1:pop si
pop cx
pop es
pop bx
ret
divdw:push bx
push si
push ax
push cx
mov si,ax
mov ax,dx
mov dx,0
div cx
mov bx,ax
mov ax,si
div cx
mov cx,dx
mov dx,bx
pop cx
pop ax
pop si
pop bx
ret
code ends
end start | | |