|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
assume cs:code,ss:stack
stack segment
dw 8 dup(0)
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,10h
mov ax,4240h
mov dx,0fh
mov cx,0ah
call divdw
mov ax,4c00h
int 21h
divdw: push ax
mov ax,dx
mov dx,0 ;为什么此处的dx需要清零
div cx
mov bx,ax
pop ax
div cx ;而此处的dx确不需要清零
mov cx,dx
mov dx,bx
ret
code ends
end start
DIV除
除数: 8位或16位 在寄存器或内存单元中
被除数÷除数=商
被除数 除数 商 余数
AX 16位 BH-BL 8位 AL AH
(DX 高位 + AX 低位) 32位 BX 16位 AX DX
你这里
mov ax,dx
mov dx,0
div cx ;用32位(dx+ax)除以16位(bx) 商在ax中, 余数在dx中
这里把dx清零,明显就是用ax16位转成(dx+ax)32们除;以便为后面的除做准备
mov bx,ax ;把ax放入bx中
pop ax ;弹出ax的值
div cx ;用32位(dx+ax)除以16位(bx) 商在ax中, 余数在dx中
这里dx是上一除的余数,ax是之前压入栈的值,bx则是上一除的商
这么详细你应该看得懂了。
|
|