在理解使用 x86 汇编语言的好处时,我尝试编写一个16x16 位乘法例程,它接受两个无符号16 位值并使用移位和 *addin*g 将它们相乘,并存储最终的 32 位结果在DX:AX中。
运行代码没有问题(换句话说,它编译得很好并与我的链接程序一起运行),但是代码没有给出预期的乘法结果。
到目前为止,这是我想出的:
从理论上讲,这应该给我 DX:AX 中的无符号 32 位结果。
当我在我的程序中使用此代码时,32 位结果的低16位(或者换句话说,AX 部分)是正确的并且显示得很好。32 位结果(DX 部分)的高 16 位不正确。
谁能帮我弄清楚我做错了什么?
提前致谢