精英盒子 -> 程序设计 -> 8086汇编函数:divdw [打印本页]

outman 2011-08-09 14:56

8086汇编函数:divdw

子程序要求:
名称:divdw
功能:进行不会产生溢出的除法运算,被除数为dword,除数为word,结果为dword。
参数:ax:dword被除数的低16位 dx:dword被除数的高16位 cx:8位除数
返回:ax::dword商的低16位 dx::dword商的高16位 cx:余数
PS:DIV指令可以做除法,但是在很多情况下会出现这种情况:
  1. mov ax,1000h
    mov dx,1
    mov bx,1
    div bx

这个除法结果的商为11000h,而11000h在ax中放不下。
要求作出一个代替div指令的子程序。
有一公式:(c语言语法)
X/N=(H/N)*65536+(H%N*65536+L)/N
X%N=(H%N*65536+L)%N
X:dword被除数
N:word除数
H:X的高十六位
L:X的第十六位

  1. assume cs:code
    code segment
    start:
    mov ax,4241h
    mov dx,000fh
    mov cx,0ah
    call divdw
    mov ax,4ch
    int 21h


    divdw:
    push ax
    mov ax,dx
    mov dx,0
    div cx
    mov si,ax


    pop ax
    div cx
    mov cx,dx
    mov dx,si


    ret
    code ends
    end start

jybox 2011-08-09 15:57
我帮你去掉了

outman 2011-08-09 20:01
-、-坑爹啊 什么规矩来的……




Powered by phpwind v8.7 Code ©2003-2011 phpwind
Time 0.045478 second(s),query:5 Gzip enabled