汇编语言子函数——除法溢出问题

来源:互联网 发布:乐高机器人用什么编程 编辑:程序博客网 时间:2024/06/06 11:50

在进行除法运算时,会遇到溢出的问题,在16位寄存器中用多加寄存器的方法来解决这个问题

对于除法运算的溢出有如下公式:

将溢出除法转换为多个不溢出的除法的计算公式

先将一个32位的数放在两个寄存器中,假设高位在dx中,低位在ax中,除数放在cx中
得到的结果的    商的高位=        dx/cx结果的商
                            商的低位=        ax/cx结果的商

                            余数=        ax/cx结果的余数

下面展示一下代码:

assume cs:code;将溢出除法转换为多个不溢出的除法的计算公式;先将一个32位的数放在两个寄存器中,假设高位在dx中,低位在ax中,除数放在cx中;得到的结果的    商的高位=        dx/cx结果的商;                商的低位=        ax/cx结果的商;                    余数=        ax/cx结果的余数code segmentstart:mov ax, 0A120H                           ;输入数的低位存放在ax中,这里的数字的十进制是500000mov dx, 0007H                            ;输入数的高位存放在dx中mov cx, 10                               ;除数存放在cx中call divdw                               ;调用子函数mov ax, 4C00Hint 21Hdivdw:push si                                   ;将子函数用到的寄存器都入栈push dipush axpush dxpush cxmov bp, sp                                ;[bp]是cx,[bp+2]是dx,[bp+4]是axmov ax, [bp + 2]                          ;ax存放16位除法的低位mov dx, 0mov bx, [bp]div bx                                    ;计算     商的高位=        dx/cx结果的商mov si, ax                                ;si存放商mov ax, [bp + 4]mov bx, [bp]div bx                                    ;计算     商的低位=        ax/cx结果的商                                          ;             余数=        ax/cx结果的余数mov cx, dx                                ;将结果的余数保存在cx中mov dx, si                                ;将结果的高位保存在dx中,同时结果的低位存在ax中pop dipop dipop dipop dipop siretcode endsend start



这里的C350H是50000,500000/10的低位就是50000,结果正确

0 0