1.源程序,计算1000000/10
;X:被除数,范围[0,FFFFFFFF] :dxax
;N:除数,范围[0,FFFF] ;N = cx
;H:X高16位,范围[0,FFFF] ;H = dx
;L:X低16位,范围[0,FFFF] ;L = ax
;int():描述性运算符,取商
;rem():描述性运算符,取余数
;公式:X/N=int(H/N)*65536+[rem(H/N)*65536+L]/N
;先做公式的第一部分int(H/N)*65536; dx/cx
assume cs:code
stack segment
db 16 dup(0)
stack ends
code segment
start:
;计算1000000/10(F4240H/0AH)
mov ax,4240h ;dword型数据的低16位
mov dx,000fh ;dword型数据的高16位
mov cx,0ah ;除数cx
mov bx,stack
mov ss,bx
mov sp,16
;divdw子程序除法运算,返回:dx=结果的高16位,ax=结果的低16位,cx=余数
call divdw
add sp,2
mov ax,4c00h
int 21h
divdw:
push ax ;div 指令是用ax做被除数,先把数据的低位入栈保存
mov bp,sp ;刚刚送进去的ax,用bp指向,之后要用到
mov ax,dx ;计算dx/cx
mov dx,0
div cx ;计算高位000f/0a,执行后 ax = 商,dx = 余数
push ax ;保存商
mov ax,ss:[bp]