16位MUL装配

Mil*_*mar -1 x86 assembly 16-bit

在x86 16位程序集上,如果有1in ax0x10(16)cl,则以下代码不会0x1000输入cl:

mul cl  ; ax = 0x  10
mul cl  ; ax = 0x 100
mul cl  ; ax = 0x0000 (not 0x1000)
Run Code Online (Sandbox Code Playgroud)

为什么这段代码没有按预期工作?

Jea*_*ean 6

您的源是8位(cl),因此乘法仅执行al.

mul cx改用.

说明: 如果ax = 100h,那么al = 00h.由于mul cl放置的结果ax,你所做的基本上是替换axwith 的内容00h*cl,这是00h.

操作码MUL

CPU:i8086 +指令类型:用户

受影响的FLAG:CF,OF,AF,PF,SF,ZF

说明:MUL src

注意:源的累加器的无符号乘法.如果"src"是字节值,则AL用作另一个被乘数,结果放在AX中.如果"src"是一个字值,则AX乘以"src",DX:AX接收结果.如果"src"是双字值,则EAX乘以"src"并且EDX:EAX接收结果.386+使用了早期的算法,它使得EAX中的任何大小值在8位或16位寄存器中快速增加.

++++++++++++++++++++++++++++++++++++++
钟表(1486):MUL REG8 13-18 MUL reg16 13-26 MUL reg32 13-42 MUL mem8 13-18 MUL mem16 13-26 MUL mem32 13-42