idiv的坑

MUL
高位全0, 则OF=CF=0, 否则OF=CF=1

imul div
这些都比较简单, 没啥标志位要考虑, 结果嘛直接a*b或a/b即可

idiv
这就略坑了, 首先你取有效位时得移位, >>符默认逻辑移位, 故你需要自己判断操作数的符号从而确定要不要补1.

然鹅, 补完1以后就可以直接相除得到正确答案了吗?

nonono~

铁汁, 记住一句话, >>符是当无符号数操作的.
所以, 你将取到的低位, 和你将0xFFFF…FFFF移位得到的符号高位相加时, 由于移完的符号高位被当成了无符号, 所以, 你加完的结果, 其实, 是个无符号数!!!

看着0xFFFFFFFFFFFFFFFD激动吧, 以为很成功, 得到了一个符号扩充完的数, 但机器其实把它当成了无符号数, 所以, 你需要额外做个强制转换

    原文作者:Dkijstra
    原文地址: https://blog.csdn.net/qq_45709371/article/details/104608206
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞