汇编-逻辑运算指令

布尔指令影响零标志、进位标志、符号标志、溢出标志及奇偶标志。下面简单回顾一下这些标志的含义:

●当运算结果等于0时,零标志置1。

●当运算在目的操作数的最高位产生进位时,进位标志置1。

●符号标志是目的操作数高位的副本,如果标志置1,表示是负数;标志清零,表示是正数(零假设为正)。

●当指令产生的结果超出了有符号目的操作数的范围时,溢出标志置1。

●当指令在目的操作数低字节中产生了偶数个1时,奇偶标志置1。

 

 

 

xor异或                            or逻辑或                                and逻辑与

not非                                TEST逻辑与 

 

64位模式下的逻辑指令

在大多数情况下,64位指令在64位模式下的操作方式与在32位模式下是一样的

如果源操作数是常数,且长度小于32位,而目的操作数是一个64位寄存器或内存操作数,那么,目的操作数中所有的位都会受到影响:

复制代码
ExitProcess PROTO   ;指定外部过程,不需要参数

.data
allones QWORD 0FFFFFFFFFFFFFFFFh

.code
main PROC
    
    mov rax,allones      ;RAX=FFFFFFFFFFFFFFFF
    and rax,80h          ;RAX=0000000000000080
    mov rbx,allones      ;RAX=FFFFFFFFFFFFFFFF
    and rbx,8080h        ;RAX =0000000000008080
    mov rcx,allones       ;RAX=FFFFFFFFFFFFFFFF
    and rcx,808080h       ;RAX=0000000000808080
     
    

    
    mov ecx,0   ;结束程序
    call ExitProcess    ;调用外部过程
    

main ENDP
END  
复制代码

 

 

 

如果源操作数是32位常数或寄存器,则目的操作数中就只有低32位会受到影响。在下面的例子中, 只有RAX的低32位被修改了:

复制代码
ExitProcess PROTO   ;指定外部过程,不需要参数

.data
allones QWORD 0FFFFFFFFFFFFFFFFh

.code
main PROC
    
    mov rax,allones      ;RAX=FFFFFFFFFFFFFFFF
    and rax,80808080h          ;RAX = FFFFFFFF80808080
    
     
    

    
    mov ecx,0   ;结束程序
    call ExitProcess    ;调用外部过程
    

main ENDP
END  
复制代码

 

 

 

 

posted @   天子骄龙  阅读(66)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
历史上的今天:
2022-12-08 MFC--CPoint点类
2021-12-08 qt5-剪贴板
2019-12-08 python--ctypes模块:调用C函数
2019-12-08 python-platform模块:平台相关属性
点击右上角即可分享
微信分享提示

目录导航