---------------------------------------------------------------------------------------------------------------------------

一.逻辑与运算指令 AND

格式: AND OPRD1,OPRD2其中目的操作数OPRD1为任一通用寄存器或存储器操作数.源操作数OPRD2为立即数、任一通用寄存器或存储器操作数.

功能: 对两个操作数实现按位逻辑与运算,结果送至目的操作数.本指令可以进行字节或字
 的‘与’运算.OPRD1<--OPRD1 and OPRD2.

说明: 1. 例如: AND AL,0FH           ; (AL)<--(AL) AND 0FH 
                     AND AX,BX            ; (AX)<--(AX) AND (BX) 
                     AND DX,BUFFER[SI+BX] 
                     AND BETA[BX],00FFH

2. 本指令影响标志位PF、SF、ZF,使CF=0、OF=0.
           例如,在同一个通用寄存器自身相与时,操作数虽不变,但使CF置零.本指令主要用于修改操作数或置某些位为零.

3. 上例中的每一条指令,将使AL寄存器的高4位置成零保持AL低4位值不变.

4. 两数相与,有一个数假则值为假

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

and小写转换大写

.data
    szText db 'Delphi', 0
.code
main proc
         lea esi
, szText
         mov ecx, lengthof szText - 1
@@:  and byte ptr [esi], 11011111b   ;大写字母和小写字母只有第五位不同
         inc esi
         loop
@B
         PrintString szText ;DELPHI
         ret
main endp
end
main

-------------------------------------------------------------------------------------------------------------------------

逻辑或指令 OR

格式: OR OPRD1,OPRD2

功能: 其中OPRD1、OPRD2含义与AND指令相同, 对标志位的影响也与AND指令相同.唯一不同的地方是,OR指令完成对两个操作数按位的‘或’运算,结果送至目的操作数中, 本指令可以进行字节或字的‘或’运算.
       OPRD1<--OPRD1 OR OPRD2.

;该指令会置 CF=OF=0; 其结果影响 SF、ZF、PF
;指令格式:
OR r/m, r/m/i

说明: 两数相或,有一个数为真则值为真

or 转小写

.data
    szText db'Delphi', 0
.code
main proc
          lea  esi
, szText

movecx,lengthof szText - 1
@@:  or byte ptr [esi], 00100000b    ;大写字母和小写字母只有第五位不同
         inc  esi
         loop
@B
         PrintString szText ;delphi
         ret
main endp
end
main

---------------------------------------------------------------------------------------------------------------------------

逻辑异或运算指令 XOR

格式: XOR OPRD1,OPRD2
功能: 其在OPRD1、OPRD2的含义与AND指令相同,对标志位的影响与与AND指令相同.本指令的功能是实现两个操作数按位‘异或’运算,结果送至目的操作数中.它可以进行字节或字的‘异或’运算.OPRD1<--OPRD1 XOR OPRD2

;该指令会置 CF=OF=0; 其结果影响 SF、ZF、PF
;指令格式:
XOR r/m, r/m/i

两次和一个相同的数 XOR 恢复到原来的数

.data
    szText db 'Hello World!', 0
.code
main proc
        ;加密
        lea     esi, szText
        mov  ecx, lengthof szText - 1
@@: xor byte  ptr [esi], 123 ;使用 123 做密码
        inc   esi
        loop
@B
        PrintString szText     ;显示乱码
   
       ;解密
        lea esi, szText
        mov  ecx, lengthof szText - 1

@@: xor byte  ptr [esi], 123
        inc  esi
        loop
@B
        PrintString szText     ;Hello World!
        ret
main endp
end
main

----------------------------------------------------------------------------------------------------------------------------------

not

;该指令不影响 EFlags
;指令格式:
NOT r/m

.data
    szText db 'Hello World!', 0
.code
main proc
        ;加密
        lea esi, szText
        mov ecx, lengthof szText - 1
@@: not  byte  ptr [esi]
        inc  esi
        loop
@B
        PrintString szText ;显示乱码
   
        ;解密
        leaesi, szText
        mov  ecx, lengthof szText - 1
@@: notbyte ptr [esi]
        inc esi
        loop
@B
        PrintString szText ;Hello World!
        ret
main endp
end
main
-----------------------------------------------------------------------------------------------------------------

测试指令 TEST

格式: TEST OPRD1,OPRD2 
功能: 其中OPRD1、OPRD2的含义同AND指令一样,也是对两个操作数进行按位的‘与’运算  ,唯一不同之处是不将‘与’的结果送目的操作数,即本指令对两个操作数的内容均不进行修改,仅是在逻辑与操作后,对标志位重新置位.

说明: TEST与AND指令的关系,有点类似于CMP与SUB指令之间的关系.

;判断字母 A 二进制(01000001)的其最后一位是否是 0, 如果是 0 那么 ZF=1
    mov  al, 'A'
    test al
, 00000001b
    lahf

    PrintHex ah ;02 - 00000010b (ZF=0)

;判断 ecx 是否为空
    mov ecx, 1
    test ecx
,ecx
    lahf

PrintHex ah ;06 - 00000010b (ZF=0, 不为空)

xor  ecx,ecx
    test ecx
, ecx
    lahf

    PrintHex ah ;06 - 01000110b (ZF=1, 为空)

------------------------------------------------------------------------------
判断字符串中每个字符的二进制位的最后一位是 1 还是 0

------------------------------------------------------------------------------

.data
    szText db 'Delphi', 0
.code
main proc
   ;清空两个寄存器用于计数
    xor  eax, eax
    xor  edx
, edx
   
     lea esi
, szText                ;字符串地址
     mov  ecx, lengthof szText - 1   ;字符串长度
L1: test byte ptr [esi], 00000001b ;循环测试每个字符的最后一位是 1 还是 0
      jz L2   ;如果是 0 则跳到 L2 给 edx+1
      inc eax ;反之给 eax+1
      jmp L3
L2: inc   edx
L3: inc   esi
      loop
L1
   
     PrintDec eax ;2 - 这是最后一位是 1 的字符的个数: e、i
     PrintDec edx ;4 - 这是最后一位是 0 的字符的个数: D、l、p、h
     ret
main endp

Win32ASM学习[11]:逻辑运算相关推荐

  1. 深度学习11个实用技巧

    深度学习11个实用技巧 深度学习工程师George Seif发表了一篇博文,总结了7个深度学习的技巧,本文增加了几个技巧,总结了11个深度学习的技巧,主要从提高深度学习模型的准确性和速度两个角度来分析 ...

  2. RxJava学习 - 11. Switching, Throttling, Windowing, and Buffering

    RxJava学习 - 11. Switching, Throttling, Windowing, and Buffering Buffering Fixed-size buffering Time-b ...

  3. 深度学习-11:神经元、神经网络、人脑和卷积神网络

    深度学习-11:神经元.神经网络.人脑和卷积神网络 深度学习原理与实践(开源图书)-总目录 在生物神经网络中,学习源自于大脑中无数神经元之间的连接.大脑接触到新的刺激后,这些神经元之间的连接改变了配置 ...

  4. 蓝桥杯单片机学习11——PCF8591A/DD/A转换芯片

    上期我们学习了DS1302实时时钟的基本使用,现在我们来学习PCF8591A/D&D/A转换芯片的相关内容 蓝桥杯单片机学习11--PCF8591A/D&D/A转换芯片 PCF8591 ...

  5. STM32单片机学习(11) DS18B20温度传感器实验

    STM32单片机学习(11) DS18B20温度传感器实验 本程序主要实现 DS18B20温度传感器数据获取,并利用串口通信把温度数据传至计算机 注:使用普中科技开发板测试时,需要拔掉Boot1插口, ...

  6. 动手学深度学习 - 11.7. d2lzh 包索引

    动手学深度学习 - 11.7. d2lzh 包索引 动手学深度学习 - Dive into Deep Learning Aston Zhang, Zachary C. Lipton, Mu Li, a ...

  7. Java学习-11 XML与JSON

    Java学习-11 XML与JSON 1.XML 1.1.简介 可扩展标记语言(eXtensible Markup Language). 特性:1. xml具有平台无关性, 是一门独立的标记语言.2. ...

  8. python 命名实体识别_Python NLTK学习11(命名实体识别和关系抽取)

    Python NLTK学习11(命名实体识别和关系抽取) 发表于: 2017年7月27日  阅读: 18262 除特别注明外,本站所有文章均为小杰Code原创 本系列博客为学习<用Python进 ...

  9. 微信小程序学习11:iconfont 网络字体图标使用(阿里巴巴)

    微信小程序学习11:iconfont 网络字体图标使用(阿里巴巴) 使用方法 [1] 是直接下载图片,使用<image src="/static/images/v2.jpg" ...

最新文章

  1. css中对position的几种定位方式的最佳诠释
  2. 2021-10-11 ! AVL树 及其平衡调整 四种情况 恋上数据结构笔记 (考过)
  3. Ibatis 升级 Mybatis
  4. TypeScript里对数组元素的自定义属性排序的实现原理
  5. android 360自动更新,解决Android百度自动更新SDK和360自动更新SDK兼容
  6. m_map投影_M_Map说明书中文版.pdf
  7. HttpClient模拟客户端请求实例
  8. 【 Codeforces Round #547 (Div. 3) G】Privatization of Roads in Treeland【树上贪心问题】
  9. matlab2017b安装之后点桌面图标黑框闪退
  10. 虚函数表存储的位置(解析C++内存分配及其编译分段)
  11. 情境领导者-第四章、选择合适的领导风格
  12. 论文解读:Missing data imputation with adversarially-trained graph convolutional network
  13. 花菁染料Cy3.5 炔烃,Cy3.5 alkyne储存条件及光谱特性解析
  14. 阿拉伯数字转中文大写的方法
  15. 【C语言】冒泡排序学习笔记
  16. 对数据库视图view的理解
  17. 字符编码的常用种类介绍
  18. JS高级进阶总结day01---面向对象编程介绍,new的工作原理以及构造函数,原型对象,实力函数三者之间的关系
  19. 关于港澳通行证的办理和续签的问题总结
  20. 059 感情的维系在于什么?

热门文章

  1. 2021上饶市高考中考成绩查询,2021年上饶中考成绩公布查询时间 上饶中考成绩查询方式入口...
  2. 远程修改linux文件内容,用VS Code连接远程Linux服务器实时修改代码
  3. 怎样调用另一个html中的元素,html – 使用DIV作为另一个元素的背景
  4. 【CSS系列】CSS 实现必填项前/后添加红色星号
  5. 漫谈:Java和Python现在都挺火,我应该怎么选?Java和Python优缺点比较。
  6. php游客随机代码,php生成随机码的一段代码
  7. linux mysql 安装启动失败,Linux服务器一键安装包的mysql启动失败
  8. hive分区用2个字段有何限制_Hive分区表和桶表的使用
  9. mysql orderby多个_MySQL OrderBy
  10. php入口函数,php 常用的系统函数