汇编-and逻辑与

and的逻辑运算符 && 

AND 指令在两个操作数的对应位之间进行(按位)逻辑与(AND)操作,并将结果存放在目标操作数中:

下列是被允许的操作数组合,但是立即操作数不能超过 32 位:

AND reg, reg
AND reg, mem
AND reg, imm
AND mem, reg
AND mem, imm

操作数可以是 8 位、16 位、32 位和 64 位,但是两个操作数必须是同样大小。两个操作数的每一对对应位都遵循如下操作原则:如果两个位都是 1,则结果位等于 1;否则结果位等于 0

 

 

AND指令常用于将操作数的某些位清0,而其余位维持不变 

 

该技术称为位屏蔽

 

.386  
.model flat,stdcall 
option casemap:none
.stack 4096

ExitProcess PROTO,dwExitCode:DWORD  
 
.data       
 
.code   
main PROC   
    
    
    mov al,10110101b        ;把低2位清零
    and al,11111011b         ;需要清零的位放0,保持不变的位放1
          ;10110001
    
 
    INVOKE ExitProcess,0  
main ENDP   
END main

 

标志位

标志AND指令总是清零溢出标志和进位标志, 并根据目的操作数的值来修改符号标志、零标志和奇偶标志。

 

将小写字符转换为大写

AND指令提供了一种简单的方法将字符从小写转换为大写。比较大写A和小写a的ASCII码, 显然只有位5不同:

A=01000001b=65=0x41
a=01100001b=97=0x61

将任何一个字符与二进制数11011111进行AND, 则除位5外的所有位都保持不变, 而位5清零

.386  
.model flat,stdcall 
option casemap:none
.stack 4096

Include Irvine32.inc
includelib Irvine32.lib

ExitProcess PROTO,dwExitCode:DWORD  
 
.data       
 
.code   
main PROC   
    
    mov al,61h    ;a=01100001b=97=0x61
    mov dh, 10              ;第 10 行
    mov dl, 20              ;第 20 列
    call Gotoxy             ;定位光标
    call WriteChar    ;显示字符
    and al,11011111b     ;将小写字符转换为大写
    mov dh, 12              ;第 12 行
    call Gotoxy             ;定位光标
    call WriteChar    ;显示字符
   
   
    

    INVOKE ExitProcess,0  
main ENDP   
END main

 

 

 

 

 

 

 

 

posted @ 2023-12-05 14:34  天子骄龙  阅读(12)  评论(0编辑  收藏  举报