div除法指令 不也是将32位的数放在两个16位的寄存器 dx,ax里面吗?8086CPU的三种总线都是16条,一次能处理的数据最大就是16位,最小就是16个0,最大就是16个1,多的位它不认识。如果它能处理32位的数据,那么它寻址的时候为什么还要采用段地址加偏移的方式去寻址,而不是直接寻址呢?用32位去寻址的话可是能寻址4GB的空间。比如说解决除法溢出的那个程序,如果一个32位的整数除以一个16位的整数,其结果最大值就是那个32位数本身,如果8086能识别32位的数,那还谈什么除法溢出呢?但是你用解决除法溢出的程序去处理,就算得到的结果是32位数本身,它也不会溢出,因为结果也是用两个16位的寄存器来存放的。至于div除法指令除数是16位则被除数是32位,是汇编语言除法运算的要求。不满足这个要求就会出错。和8086CPU能处理多大尺寸的数据没有一点关系,8086CPU能处理的最大尺寸的数据是由它有多少条总线决定的。个人见解。 |