8086双寄存器MUL运算逆操作:从DX、AX还原原AX值
还原MUL运算前的AX值:用DIV指令搞定逆操作
嘿,这事儿其实直接用x86的除法指令就能解决,刚好对应MUL的逆运算!先理清楚逻辑:
你之前用mul dx的时候,本质是把AX里的16位无符号数和DX里的16位无符号数相乘,结果存在DX:AX这个32位组合寄存器里——你的例子里就是0007h:C024h(也就是32位值0007C024h),这正是1234h × 109h的结果。
要把这个乘积还原回原来的AX值,只需要做一次32位除以16位的无符号除法就行,步骤如下:
具体操作代码
首先确保你的DX和AX里已经存着MUL后的结果(DX=0007h,AX=C024h),然后执行:
mov bx, 109h ; 把原来的除数(也就是之前的DX值)放到BX里 div bx ; 用DX:AX除以BX,商回存到AX,余数存DX
执行完这条div bx之后:
- AX里就会是你要的原始值
1234h(这是除法的商) - DX里会是
0000h(因为这是精确的乘积逆运算,没有余数)
手动验证一下
咱们算一遍确认:1234h转十进制是4660,109h是265,4660×265=1234900,转十六进制就是0007C024h,刚好是你MUL后的DX:AX值。用这个数除以265(109h),结果就是4660(1234h),完全对得上。
小提醒
- 如果是有符号乘法用的
imul,那得对应用idiv来逆运算,但你这里是无符号的mul,所以div就够了。 - 别忘除数不能是0,这里你用的是109h,肯定没问题,要是除数为0会触发错误异常的。
内容的提问来源于stack exchange,提问作者Yeho
相关产品推荐
相关产品推荐

