汇编-逻辑运算指令
布尔指令影响零标志、进位标志、符号标志、溢出标志及奇偶标志。下面简单回顾一下这些标志的含义:
●当运算结果等于0时,零标志置1。
●当运算在目的操作数的最高位产生进位时,进位标志置1。
●符号标志是目的操作数高位的副本,如果标志置1,表示是负数;标志清零,表示是正数(零假设为正)。
●当指令产生的结果超出了有符号目的操作数的范围时,溢出标志置1。
●当指令在目的操作数低字节中产生了偶数个1时,奇偶标志置1。
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!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模块:平台相关属性