• 常用的数学运算指令


    inc和dec

    执行增加和减少的操作,如果是INC指令的话,就加1,如果是DEC指令的话,就减1

    ADD

    ADD指令有两个操作数,相加后的结果存放到第一个操作数中。ADD EAX,1等价于INC EAX。 ADD也将两个寄存器相加,我们可以到OD里面看一看。

    ADC(带进位的加法)

    两个操作数的和加上进位标志(C)的值,结果存放到第一个操作数中。

    SUB

    ADD刚好相反-它将第一个操作数减去第二个操作数的值存放到第一个操作数中。

    SBB

    该指令跟ADC正好相反,它计算两个操作数的差值,并且还要减去进位标志,结果存放到第一个操作数中。

    MUL(无符号数的乘法)

    有两种乘法,第一个种是MUL,这种是无符号数乘法,只有一个操作数,另一个操作数是EAX,结果存放到EDX:EAX中。

    例如:

    MUL ECX

    这里是无符号数EAX,ECX相乘,结果存放到EDX:EAX中。

    比如 乘后的结果 位数大于 Eax存放的32位  就会把存放不下的存放在EDX中

    IMUL(有符号数的乘法)

    IMUL指令用法类似于MUL

    IMUL ECX

    该指令将有有符号数ECX乘以EAX,结果存放到EDX:EAX中。

    除了上面一条指令外,IMUL还允许使用多个操作数,这是与MUL不同的地方。

    IMUL EBP, DWORD PTR [ESI+74], FF800002
    DWORD PTR [ESI+74]和FF800002 乘法后的值存放在ebp中


    DIV(无符号除法)/IDIV(有符号除法)

    类似 mul和imul

    XADD(交换并相加)

    这个指令其实就是XCHGADD两个简单指令的组合。

    XADD EAX,ECX

    NEG

    该指令的目的是将操作数的符号取反,即如果我们有一个32位的16进制数,NEG操作以后,结果就会取反。

    AND

    只有两个二进制位都为1的时候结果才为1,其他情况,结果都为0

    OR

    该指令AND的不同之处在于,两位中只要有一位为1,结果就取1

    XOR

    该指令时异或运算,当两位不同时取1,相同时取0

    NOT

    该指令是简单的按位取反。

    这里讨论下 无符号位的加法和减法 

    这里比如 4+2

    00000100+

    00000010=00000110=6

    减法 4-2

    00000100-

    00000010=0000010=2

    减法2-4 

    这里发现 2比4要小 这里减法 改成 有符号位加法 (+)2+(-4)

    这里 4的2进制00000100 补码表示法=反码+1=11111011+1=11111100

    00000010+

    11111100=11111110=FE






  • 相关阅读:
    一个JAVA题引发的思考
    eclipse好玩的插件集(一) CKEditor插件
    Log4J使用实例---日志进行邮件发送或是存入数据库
    log4j输出到数据库(输出自定义参数、分级保存)
    String和StringBuffer的一点研究
    String、StringBuffer、StringBuilder区分和性能比较
    最新eclipse安装SVN插件
    jsoup select 选择器
    网页导出excel文件
    Dom4j完整教程
  • 原文地址:https://www.cnblogs.com/liaomin416100569/p/9331279.html
Copyright © 2020-2023  润新知