汇编:除法溢出的问题 dx结果错误
assume cs:codecode segment
start:
mov ax,4240h
mov dx,000fh
mov cx,0ah
call divdw
mov ax,4c00h
int 21h
divdw:
push ax ;低16位先保存
mov ax,dx ;ax这时候的值是高16位了
mov dx,0 ;
div cx ;H/N,dx是余数,ax是商
push ax ;将ax压入栈
add sp,2 ;
pop ax
div cx
mov cx,dx;dx余数
sub sp,4
pop dx
pop bx
ret
code ends
end start zcw.. 发表于 2020-10-26 18:36
我想知道的是为什么dx的值是错的
能改变你程序的栈的内容的可能是操作系统,也有可能是调试器。操作系统通常不会去改变应用程序的数据,因此,只有调试器会去动你的栈。
调试器通常认为sp指针之前的数据是无用的。
你把除法运算得到的商AX入栈,又将sp加2,调试器认为sp之前的数据无用,就自己用了,就你存入的AX破坏了。 assume cs:code
code segment
start:
mov ax,4240h
mov dx,000fh
mov cx,0ah
call divdw
mov ax,4c00h
int 21h
divdw:
push bp
mov bp,sp
sub sp,2
push ax ;低16位先保存
mov ax,dx ;ax这时候的值是高16位了
mov dx,0 ;
div cx ;H/N,dx是余数,ax是商
mov ,ax
pop ax
div cx
mov cx,dx;dx余数
mov dx,
mov sp,bp
pop bp
ret
code ends
end start xieglt 发表于 2020-10-26 18:04
我想知道的是为什么dx的值是错的 好的,明白了,谢谢!
页:
[1]