汇编除法 - CSDN
  • 汇编除法的问题

    千次阅读 2016-03-31 16:26:49
    div是除法指令,使用div做除法的时候应注意以下问题:1、除数:有8位和16位两种,在一个寄存器或者内存中。2、被除数:默认放在AX或(DX和AX)中,如果除数为8位,被除数为16位,被除数默认在AX中存放,如果除数为16...

    div是除法指令,使用div做除法的时候应注意以下问题:

    1、除数:有8位和16位两种,在一个寄存器或者内存中。

    2、被除数:默认放在AX或(DX和AX)中,如果除数为8位,被除数为16位,被除数默认在AX中存放,如果除数为16位,被除数为32位,被  除数则在(DX和AX)中存放,DX存放高16位,AX存放低16位。

    3、结果:如果除数是8位,则AL存储除法操作的商,AH存储除法操作的余数;如果除数是16位,则AX存储除法操作的商,DX存储除法操作的余数。

    格式如下:

    div reg

    div 内存单元

    80x86的除法指令,被除数的“位数”是除数的两倍。 但是,除法指令正确执行是有条件的。这个条件是:被除数的高一半,必须小于除数。 如果数据不满足这样的条件,被除数的高一半大于或者等于除数,就会产生除法溢出。 若发生除法溢出,会自动触发0号中断---除法溢出中断。 满足上面的条件,就能保证商数的位数最多只有被除数的一半,不发生溢出。
    展开全文
  • 汇编除法运算

    万次阅读 2016-01-30 10:52:08
    汇编除法指令是div, 实际上相对高级语言的除法, 汇编指令的div是同时得到商和余数的, 结果分别保存在不同的寄存器. 除数: 有8位和16位两种, 在一个寄存器或者内存单元中 被除数: 如果除数是8位则被除数为16位, ...

    汇编的除法指令是div, 实际上相对高级语言的除法, 汇编指令的div是同时得到商和余数的, 结果分别保存在不同的寄存器.

    1. 除数: 有8位和16位两种, 在一个寄存器或者内存单元中
    2. 被除数: 如果除数是8位则被除数为16位, 默认放在AX中, 如果除数是16位, 则被除数为32位, 默认高位放在DX, 低位放在AX
    3. 结果: 如果除数是8位, 那么执行div后, 余数存放在AH, 商存放在AL中; 如果除数是16位, 那么AX保存商, DX保存余数
      注意: 被除数的位数一定是除数的两倍

    指令格式:
    1: div registre
    2: div 内存单元

    一个除数为8位的例子(96除以10)

    mov ax 60h ;dec 96 = hex 60
    mov bh 0ah ;dec 10 = hex ah, 代码中数字起始位位字母要在最前加0
    div bh ;执行后ax为:0609, 即高位ah=06(余数), 低位al=09(商)

    执行div后ax的高低位就可以后后续的计算了

    展开全文
  • 可实现任意字节除法运算,运行结果正确 可实现任意字节除法运算,运行结果正确 可实现任意字节除法运算,运行结果正确
  • 汇编除法优化~

    千次阅读 2011-06-07 22:17:00
    汇编里面的除法优化就是乘以除数的倒数a/11 汇编代码:mov eax,2E8BA2E9imul ecxsar edx,1;edx中存放的是乘法运算的高位双字节,即相当于a*2E8BA2E9右移了32位,sar再移位1位,;edx=(a*2E8BA2E9)>>(32+1) =a*0....

    汇编里面的除法优化就是乘以除数的倒数

    a/11

     

    汇编代码:

    mov eax,2E8BA2E9

    imul ecx

    sar  edx,1

    ;edx中存放的是乘法运算的高位双字节,即相当于a*2E8BA2E9右移了32位,sar再移位1位,

    ;edx=(a*2E8BA2E9)>>(32+1)

           =a*0.090909090940840542316436767

           =a/11

    ;这边只考虑高位是因为低位右移都舍去了

    mov ecx,edx

    shr   ecx,1F

    ;ecx右移31位,也就是取最高位

    add  edx,ecx

    ;负数加1

     

    ~~

    展开全文
  • 汇编算法之除法

    千次阅读 2011-11-09 16:50:24
    汇编算法之除法 2010-05-12 21:22 除法说得简单一点就是循环做减法,等减到不能再减了,那商也就出来了,余数也就得到了。 在单片机系统中,有时候也要用到除法的,但如果没有除法指令怎么办呢? 而且...
     
    
    汇编算法之除法
    2010-05-12 21:22

    除法说得简单一点就是循环做减法,等减到不能再减了,那商也就出来了,余数也就得到了。

    在单片机系统中,有时候也要用到除法的,但如果没有除法指令怎么办呢?

    而且单片机系统中除法和现实纯数学中的又不一样,它需要节约硬件资源又要运算速度快。

    下面就介绍一种即省时又节约资源的单字节除法算法,并附上51的汇编程序:

     

    算法思想

    00001001/00000011=00000011

    被除数是00001001(9)

    除数是00000011(3)

    商是00000011(3)

    余数是00000000(0)

    算法思想是:

    1、将被除数高位移入Temp中(高位开始按顺序移入Temp中)

    2、将Temp减去除数

    3、如果小于0,则置商值低位为0

         如果大于等于0,则置商值低位为1,并将相减的结果放入Temp中

    4、将商值左移1位

    5、判断是否循环完成(一共循环8次)

    6、没有则跳到步骤1继续执行

    7、完成则存入商值和余数(Temp)

     

    按照上面的例子执行的结果如下:

    1、00000000-00000011小于0,商值为00000000

    2、00000000-00000011小于0,商值为00000000

    3、00000000-00000011小于0,商值为00000000

    4、00000000-00000011小于0,商值为00000000

    5、00000001-00000011小于0,商值为00000000

    6、00000010-00000011小于0,商值为00000000

    7、00000100-00000011大于0,商值为00000001,余数为00000001赋值给Temp

    8、00000011-00000011等于0,商值为00000011,余数为00000000

    至此算法完成

    注:单字节是循环8次,如果是双字节就要循环16次,依次类推

     

     附:

    如果是00001011/00000011

    ...

    7.  101-11  商1      余10

    8.  101(10为上一次的余数10,1为输入的1)-11  商11(商值左移1位)    余10

    ...

    附51单片机汇编程序

    lt1     db     ?     ;除数
    lt2     db     ?     ;被除数
    tmp1    db     ?     ;商
    tmp2    db     ?     ;中间变量
    tmp3    db     ?     ;作为被除数的中间变量
    tmp     db     ?     ;循环的次数
    code   .section    at 0   'code'
    org    00h
    jmp    start
    org    04h
    ret
    org    20h
    start:
    mov    a,05h
    mov    lt2,a        ;赋值给被除数
    mov    a,00h
    mov    lt1,a        ;赋值给除数
    sz     acc
    jmp    go_on
    jmp    end_         ;如果除数为0,程序结束   
    ;----------------
    go_on:
          mov   a,lt2
    divui_0:           ;开始除法运算
          mov   tmp3,a   ;被除数赋给tmp3
          mov   a,8
          mov   tmp,a    ;循环的次数
          clr   tmp1
          clr   tmp2
    divui_1:
          clr   c         ;清除借位标志
          rlc   tmp3      ;被除数左移一位
          rlc   tmp2      ;把被除数从高位左移至tmp2
          mov   a,lt1     ;除数赋给acc
          sub  

    展开全文
  • 1000 / 100除数: 分8位和16位,存放在reg(寄存器)或内存单元被数: 分16位和32位 被数为16位,则除数为8位,被数默认存放在AX中; 被数为32位,则除数为16位,被数存放在AX和DX中,AX低8位,DX高8...
  • 汇编语言乘法和除法指令

    千次阅读 2019-04-18 10:21:51
    乘法和除法指令 IA-32 处理器的乘法和除法指令需要区别无符号数和有符号数, 并隐含便用丁 EAX (和EDX) 寄存器。 1.乘法指令MUL/IMUL 基本的乘法指令指出源操作数 reg/mem (寄存器或存储单元), 隐含使用目的操作数,表...
  • idiv 和fdiv有什么区别 1820: i = i / 0.0; //为什么改成 i = i / 0.0;就不报错? 004015DF fild dword ptr [ebp-4 004015E2 fdiv qword ptr [__real@8@00000000000000000000 (0046fce8) 004015E8 call __ftol ...
  • 51汇编多字节除法

    2020-07-30 23:31:44
    多字节hex码汇编除法,六字节除以二字节,被除数是六字节hex码,除数是二字节HEX码。
  • div是除法指令,使用div做除法的时候应注意以下问题: 1、除数:有8位和16位两种,在一个寄存器或者内存中。 2、被除数:默认放在AX或(DX和AX)中,如果除数为8位,被除数为16位,被除数默认在AX中存放,如果...
  • 编写无溢出除法汇编子程序

    万次阅读 多人点赞 2013-12-21 16:03:07
    看到这个标题,你可能会问汇编中不是有div指令来实现除法运算吗?为什么我们还要自己写一个子程序来实现除法?为了说明我们为什么需要自己写一个实现除法的子程序,还得从除法为什么会发生溢出说起。 在汇编中,...
  • 汇编中的乘法和除法

    2019-07-06 01:21:10
    汇编中的除法和乘法 div (1)除数: 有8位和16位两种,在一个reg或内存单元中 (2)被除数: 默认放在AX或DX和AX中,如果除数为8位,被除数则为16位,默认在AX中存放; 如果除数为16位,被除数则为32位...
  • 汇编语言除法公式溢出问题 当且仅当 H(高16位) ≤ ( n - 1 ) 时 才不会溢出 即 ( H * 65536 ) / n + L / n ≤ 65535( 商) + ( n - 1 ) 余数 =》 (n-1) * 65536 / n + L/n ≤ 65534 + n =》 (n-1) * 65536...
  • 单片机汇编语言--双字节二进制无符号数与单字节和双字节做除法,两个程序
  • 乘法除法汇编

    2019-02-25 23:51:50
    汇编乘法指令一般为mul,imul,如果在汇编中使用这些指令来进行乘法运算,会比较慢,一般要进行转换。 int fun(){ int a; printf("%d,%d,%d",a11+4,a9,a2); return 0; } 反汇编:push ecx //为局部变量a分...
  • 汇编:div 除法指令

    千次阅读 2018-12-19 00:09:46
          assume cs:code, ds:data, ss:stack data segment db 0,1,2,3,4,5,6,7 data ends stack segment dw 0,0,0,0,0,0,0,0 stack ends code segment start: mov ax, data mov ds...
  • 汇编中的除法指令

    千次阅读 2011-05-09 14:57:00
    AT&T汇编中的除法指令也分为两种:signed、unsignedunsigned:divdivisor//除数 a 8、16、32-bits register or memory value被除数隐含的放在ax、dx:ax、edx:eax中其中,除数的大小依据被除数大小有限制1....
  • DIV (unsigned divide) 无符号数除法 格式:DIV SRC 执行的操作:  字节操作:16位被除数在AX,8位除数为源操作数,结果的8位商在AL中,8位余数在AH中。表示为  (AL)<-(AX)/(SRC) 的商 (AH) <...
  • DIV只能用于两个单字节之间的除法,有时处理的数据是双字节大小,就需要单独写出双字节除法子程序。 实现的原理还是简单的列式模拟,但是汇编的细节更多。对熟练掌握汇编需要对二进制运算和移位操作非常熟悉。 &...
  • 汇编实验10-2 解决除法溢出的问题

    千次阅读 2015-05-29 21:15:51
    而产生除法溢出的情况(如FFFFFFFF/1,16位寄存器ax储存不了32位数据) ;子程序的实现过程在书中实验的提示给了算法,在理解的基础上写出程序即可 ;以下为程序 assume cs:code,ss:stack stack segment db 16 dup (0...
1 2 3 4 5 ... 20
收藏数 22,252
精华内容 8,900
热门标签
关键字:

汇编除法