汇编-逻辑运算指令

布尔指令影响零标志、进位标志、符号标志、溢出标志及奇偶标志。下面简单回顾一下这些标志的含义:
●当运算结果等于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



浙公网安备 33010602011771号