汇编语言乘指令 MUL、IMUL的具体使用

    MUL: 无符号乘

    ==================================================

    ;影响 OF、CF 标志位
    ;指令格式:
    ;MUL r/m  ;参数是乘数

    ;如果参数是 r8/m8,   将把  AL 做乘数, 结果放在 AX
    ;如果参数是 r16/m16, 将把 AX 做乘数, 结果放在 EAX
    ;如果参数是 r32/m32, 将把 EAX 做乘数, 结果放在 EDX:EAX
    当乘积的高半部分(AH、DX、EDX、RDX)中存有结果的有效数字,则CF=OF=1,否则CF=OF=0。
    =======================================================

    IMUL: 有符号乘

    =======================================================

    ;影响 OF、CF 标志位
    ;第一种指令格式:
    ;IMUL r/m  ;单操作数

    ;如果参数是 r8/m8,   将把  AL 做乘数, 结果放在 AX
    ;如果参数是 r16/m16, 将把 AX 做乘数, 结果放在 EAX
    ;如果参数是 r32/m32, 将把 EAX 做乘数, 结果放在 EDX:EAX

    ;以上这些都是和 MUL 一样的, 只是运算结果有时一样、有时不一样.

    ;IMUL 还有另外两种指令格式:
    ;IMUL r16/r32, r16/r32/m16/m32/i  ;双操作数, (1)*(2) -> (1)
    ;IMUL r16/r32, r16/r32/m16/m32, i ;三操作数, (2)*(3) -> (1)

    ;其中常数 i 的位数可以 <= 但不能 > 其他操作数
    =======================================================

    简单应用

    =================================================

    imul edx, ebx ;edx=edx*ebx
    imul edx, ebx,8 ;edx=ebx*8
    一,目的数为16或32寄存器
    二,操作数长度相等
    三,三操作数依次为目的,源,立即数
    四,与单操作数不溢出不同,可能产生溢出

    就这样简要述说了…

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持lingkb。