已知AL = -41,BL = 3。
执行CBW指令(Convert Byte to Word),AL的扩展符号到AH,所以AH的值是1(因为-41是负数,扩展符号位是1,表示结果是负的)。此时,AX = -41 1。
接下来执行IDIV BL指令,该指令将DX:AX(32位)除以BL(16位)。在本例中,DX为,AX = -41 1。
因此,我们来进行以下除法计算: 1:11010000 1100001 (-41 1) / 11
首先,计算商的高16位,-41除以3,结果是-137(因为-41实际上是111111111101001,除以3得到的是10000110101,转换为十进制为-137),余数为2。
将除法的商取高16位存回AX = -137,余数存储在BL = 2。
因此,执行这两条指令后,AX的值分别为 -41 1 和 -89 2。
请注意,这个答案依赖于具体的16位或32位环境以及DX寄存器的初始状态。如果在执行CBW之后,16位的BP和IX寄存器被清零的话,DX寄存器应该确实是。这个答案也假定在执行除法指令后,余数被存储在BL中,这取决于使用的是16位还是32位版本的IDIV指令。如果你处于一个32位环境,那么除法后AX会覆盖EAX的低16位,而EAX的高16位只有当使用32位除数(BL是16位的一部分)时才会有影响。如果你处于一个16位的CPU环境中,那么AX的高16位(AH)不会受到影响,因为BL本身就是16位寄存器。
这个解释是给那些熟悉x86架构并且对这些问题感兴趣的读者的。如果你确定了自己的环境,请告诉我,我可以提供更准确的答案。