知道 8086汇编里的DIV除法指令么?
在8086汇编里面 除法是32位处以16位
16位处以8位
(int)a/10
对于你的这句 是把双精度变量a强制转换成整型,我假设10在代码段中也占据32位的空间,那么两个32位相除在8086系列芯片的DIV除法里应该会报错的 。
另外相同的代码在不同的编译器里面出现的结果也是不同,比如你这段代码在我的编译器中可以正确编译并运行,个人觉得是由于编译器在编译时会有代码优化和翻译成中间代码,再翻译到机器代码等等的过程,所以不同的编译器处理的手段就不一样,导致生成后的机器指令之间也会有差别,所以会出现上面的运行时错误。
当然,以上只是我个人的分析,可能有不对的地方,仅供参考,欢迎批评指教。以下是8086汇编的DIV指令信息。
无符号数除法指令 DIV(DIVision)
8086汇编语言指令格式:
DIV OPRD
8086汇编语言指令功能:
实现两个无符号二进制数除法运算
8086汇编语言指令说明:
1. 其中OPRD为任一个通用寄存器或存储器操作数
2. 字节相除,被除数在AX中;字相除,被除数在DX,AX中,除数在OPRD中.
字节除法: (AL)<--(AX)/OPRD,(AH)<--(AX)MOD OPRD
字除法: (AX)<--(DX)(AX)/OPRD,(DX)<--(DX)(AX) MOD OPRD
3. 示例: DIV BETA [BX]
DIV CX;商在AX中,余数在DX中
DIV BL;商在AL中,作数在AH中
4. 当除法的商产生溢出时,例如字节除法的商大于0FFH,字除法的商大于0FFFFH将置溢出标志位OF=1,并产生一 个类型0溢出中断
5. 本指令不产生有效的示志位。