assume cs:code, ds:data, ss:stack
stack segment
db 16 dup (0)
stack ends
code segment
start:
mov ax, 4240h
mov dx, 0fh
mov cx, 0ah
call divdw
mov ax, 4c00h
int 21h
;;;divdw子程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;功能: 不产生溢出的除法运算,被除数为dword,除数为word,结果为dword
;参数: (dx)=dword型数据的高16位
; (ax)=dword型数据的低16位
; (cx)=除数
;返回: (dx)=商的高16位
; (ax)=商的低16位
; (cx)=余数
divdw:
push si
push di
mov si, ax ;暂存ax
;求商的高16位
mov ax, dx
sub dx, dx
div cx
mov di, ax ;暂存商的高16位
;dx保留第一次除法运算的余数,直接用于第二次除法运算
mov ax, si
div cx
;ax为商的低16位
mov cx, dx ;余数保存在cx
mov dx, di ;商的高16位
pop di
pop si
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
code ends
end start
8086汇编不溢出除法
最新推荐文章于 2024-08-17 22:27:17 发布