汇编语言的DIV指令

您所在的位置:网站首页 汇编里的div 汇编语言的DIV指令

汇编语言的DIV指令

2024-07-16 20:18| 来源: 网络整理| 查看: 265

汇编语言的DIV指令是除法指令

A / B  A是被除数,B是除数

 

除数B有 8位和16位两种,保存在一个reg寄存器里 或是内存单元中。

 

被除数A 默认存放在AX中(16位以内) 或 AX和DX中(32位,DX存放高16位,AX存放低16位)

 

结果: 如果除数B是8位,那么除法的结果AL保存商,AH保存余数,

       如果除数B是16位,那么除法的结果 AX保存商,DX保存余数。

 

公式如下:

     1:  div byte ptr ds:[0]

       含义:(al)= (ax)/((ds)*16+0) 的商

              (ah) = (ax/(ds)*16+0) 的余数

    

     2:div word ptr es:[0]

        含义:(ax) = [(dx)*10000H+(ax)] / ((es)*16+0)的商               (dx) = [(dx)*10000H+(ax)] / ((es)*16+0)的余数

     

 

     3:div byte ptr [bx+si+8]

        含义:(al) = (ax) / ((ds)*16+(bx)+(si)+8) 的商

               (ah) = (ax) / ((ds)*16+(bx)+(si)+8) 的余数

 

     4:div word ptr [bx+si+8]

        含义:(ax) = [(dx)*10000h+(ax)] / ((ds)*16+(bx)+(si)+8) 的商

              (dx) = [(dx)*10000h+(ax)] / ((ds)*16+(bx)+(si)+8) 的余数

 

 

举例说明:

  100001 / 100

100001的16进制是186A1H,这个被除数大于16位,所以要用32位来存储,DX存放高16位 0001,AX存放低16位 86A1H, 除数100可以存放在8位和16位都可以,但是如果除数100存放在8位中,因为上面说了,除数8位的话,运算的结果就会把商放入到AL中,AH保存余数。100001/100的商是1000余数是1 ,1000根本无法保存到AL中(AL最多保存255),所以必须将100保存到16位中

  代码如下:

     assume cs:code         code segment         mov dx,1         mov ax,86a1h         mov bx,100         div bx      code ends      end

  运行结果AX:03E8 (商) DX:0001 余数

 

如果将上面的 mov bx,100 div bx 改位 mov bl,100 div bl 运行后会报错"DIVED OVERFLOW" 也就除法结果溢出错误。  



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3