汇编中的除法溢出的解决

来源:互联网 发布:时间线管理软件 编辑:程序博客网 时间:2024/05/21 04:42

说明: 除法的指令为div + 8位(16位)

           是8位时,会默认被除数是ax寄存器中的16位,商会保存在al中,ah保存余数

           是16位时,会默认被除数是dx(为高位)和ax(低位)组成的32位,商保存在ax中,余数保存在dx中

问题:当有式子1000/1  

              mov ax,1000
              mov bl,1
              div bl

           则会把商1000放到al中,由于超过了256,所以会产生溢出。

解决方法:可以把ax拆开来分别进行算。

               mov ax,1000

               mov bl,1

               push al         ;把低四位的保存起来

               mov al,ah  

               mov ah,0      ;先计算高位的   

               div bl            ;商放到al中,余数放到ah中

               mov dl,al     ;保存高四位的商 

               pop al           ;取出低四位

               div bl            ;低四位的商放到al中,余数放到ah中

 很好的解决了溢出的问题:http://bbs.csdn.net/topics/380155364

0 0
原创粉丝点击