+ -
当前位置:首页 → 问答吧 → 用减法实现32位除法

用减法实现32位除法

时间:2010-12-22

来源:互联网

有感彪兄弟的帖
http://topic.csdn.net/u/20101222/11/468e27eb-2806-4102-ae8d-576fac0e7a9c.html?790

我的做法是把除法化解成减法,便于理解,效率上不做考虑!
Assembly code

assume    cs:code,ds:data
data    segment
quo    dw    0       ;
rem    dw    0       ;余数
data    ends
code    segment
start:
    mov ax,data
    mov ds,ax
;
    mov ax,1234h    ;被除数高16位
    mov dx,5678h    ;低16位
    mov cx,0123h    ;除数高16位
    mov bx,4567h    ;低16位
;
s0:
    sub dx,bx       ;做32位减法
    sbb ax,cx       ;
    cmp ax,cx       ;高16位比较
    jb s1
    inc word ptr quo ;商增1
    jmp s0
s1:
    cmp dx,bx        ;低16位比较
    jb s2
    inc word ptr quo  ;商增1
    jmp s0
s2:
    mov word ptr rem,dx ;rem<--余数
;
    mov ah,4ch
    int 21h
code    ends
end    start

作者: masmaster   发布时间: 2010-12-22

123456789012345678901234567890/87654321
怎么办???买个电脑就专门让它在那算???!!!

作者: nanlingcg   发布时间: 2010-12-22

为什么s1代码段要用cmp dx,bx???

作者: abgood   发布时间: 2010-12-22

引用 2 楼 abgood 的回复:
为什么s1代码段要用cmp dx,bx???

这段比较的被除数是否小于除数。如果被除数小于除数, 余数自然就是那个dx啦~

作者: masmaster   发布时间: 2010-12-22