当前位置: 代码迷 >> 汇编语言 >> 溢出的有关问题
  详细解决方案

溢出的有关问题

热度:3774   发布时间:2013-02-26 00:00:00.0
溢出的问题
;systime proc far
data segment 
temp db 20 dup()
data ends
stack segment para stack'stack'
db 128 dup(0)
stack ends
code segment
assume cs:code ,ss:stack
start:
mov ah,2ah
int 21h
push dx
mov dx,cx
call outdeci
pop dx
call outdeci
xor dx,dx
mov dl,al
call outdeci
mov ah,4ch 
int 21h

outdeci proc near
push ax
push cx
xor ax,ax
xor cx,cx
xor bx,bx
mov ax,dx
mov bx,10
mov cx,4
cycle:div bx
lea si,[temp+3]
add ah,30h  
mov [si],ah
xor ah,ah
dec si
cmp ah,0
je cmpal
jmp cycle
cmpal:cmp al,0
jne cycle
lea dx,temp
mov ah,09h
int 21h
pop cx
pop ax
ret
outdeci endp
code ends
end start

;出现的是divide overflow,请高手解释一下这个除法溢出是什么原因,不明白

------解决方案--------------------------------------------------------
cycle:div bx 这里 div 指令之前,应先将 dx 置 0。因为 div bx 是 dx:ax 除以 bx 。
另外,下面对月日的处理有误,你将其作为一个数值进行处理了,但其实 dh 里是月,dl 里是日,应该分别进行处理。最后显示上也有问题,直接从 temp 开始显示的话,对于月日星期这样的不足 4 位的就会多显了前面遗留的内容;可以 lea dx, [si+1] 再显示 dx 指向的内容。当然了 temp 预定义也不妥,应该预置 '$' 字符才能被 int21h 的 9 功能正确识别。
------解决方案--------------------------------------------------------
xor dx,dx
  相关解决方案