8位除法:
如果被除数是8位的,它必须放在AX寄存器的低8位(即AL)中。
除数可以是一个8位的寄存器或内存值。
除法操作后,商存放在AL中,余数存放在AH中。
16位除法:
如果被除数是16位的,它必须放在AX寄存器中。
但对于32位的被除数(由DX:AX表示,其中DX是高16位,AX是低16位),除法操作需要DX寄存器来存放被除数的高16位。
除数可以是一个16位的寄存器或内存值(对于32位被除数,除数也相应地是16位或32位,但div指令只直接处理16位除数;对于32位除数,需要使用idiv指令)。
对于16位被除数和除数,商存放在AX中,余数存放在DX中。
对于32位被除数和16位除数(使用idiv指令进行有符号除法),商的高16位存放在DX中,商的低16位存放在AX中;余数仍然在DX中(但注意,此时DX中的值是除法操作后的余数,而不是之前的被除数高16位)。
32位除法:
使用idiv指令进行32位除法时,被除数由EDX:EAX表示(EDX是高32位,EAX是低32位)。
除数可以是16位或32位,但idiv指令在这里处理的是32位被除数和32位(通过符号扩展得到的)除数。
商的高32位存放在EDX中,商的低32位存放在EAX中。
余数(如果有的话,对于idiv指令来说,余数总是存在于EDX中,但在执行完idiv后,它表示的是除法操作后的余数,而不是之前的被除数高32位)也存放在EDX中,但在获取商之后,通常不会单独使用余数寄存器,而是根据上下文来决定如何处理余数。
需要注意的是,div指令用于无符号除法,而idiv指令用于有符号除法。在选择使用哪个指令时,应该根据操作数的符号来确定。