汇编语言——逻辑运算和移位指令

逻辑运算和移位指令

逻辑运算指令

逻辑与AND
  • 格式
    AND reg, imm/reg/mem ;reg←reg^imm/reg/mem
    AND mem, imm/reg ; mem←-mem ^ imm/reg
  • 功能:对两个操作数执行按位的逻辑与运算,结果送到目的操作数
  • 说明:
    (1)按位的逻辑与运算;
    (2)操作数不能同时为存储器操作数;
    (3)注意对标志位的影响; (OF,CF==0)
  • 思考:
    (1)某一个操作数自己和自己相逻辑与,结果是?(还是其本身)
    (2) AND指令主要用在什么场合?
    可屏蔽某些位(将这些位置0) 注:和0与清零,和1与保留原来的值
    汇编语言——逻辑运算和移位指令_第1张图片
逻辑或OR
  • 格式
    OR reg,imm/reg/mem; reg←reg V imm/reg/mem
    OR mem,imm/reg ; mem←memV imm/reg
  • 功能:对两个操作数执行按位逻辑或运算,结果送到目的操作数
  • 说明
    (1)按位逻辑或运算;
    (2)OR指令对操作数的限制和对标志位的影响;(OF,CF==0)
    思考:
    (1)某一个操作数自己和自己相逻辑或,结果是?其本身
    (2)OR指令主要用在什么场合? 功能: 使某些位置为1
    汇编语言——逻辑运算和移位指令_第2张图片
逻辑非NOT
  • 格式 NOT reg/mem ;~reg/mem
  • 功能:对一个操作数执行按位逻辑非运算
  • 说明
    (1)按位取反,原来是“0”的位变为“1”,原来是“1”的位变为“0”;
    (2) NOT指令是一个单操作数指令;
    (3) NOT指令不影响标志位;
逻辑异或XOR
  • 格式
    XOR reg,imm/reg/mem ; reg← reg 异或 imm/reg/mem
    XOR mem,imm/reg ; mem← mem 异或 imm/reg
  • 功能:对两个操作数执行按位逻辑异或运算,结果送到目的操作数
  • 说明:
    (1) 只有相“异或”的两位不相同,结果才是1;
    (2)XOR指令对操作数的限制和对标志位的影响同AND指令(OF,CF==0)
  • 思考:
    (1)某一个操作数自己和自己相异或,结果是?为0
    (2) XOR指令主要用在什么场合?
    使操作数的某些位取反或测试两数是否相等
测试TEST
  • 格式:
    TEST reg, imm/reg/mem ; reg^ imm/reg/mem
    TEST mem, imm/reg ; mem^ imm/reg
    TEST目的,源 ;目的^源,不回送结果,但影响标志位(例如ZF)
  • 例子
    TEST AL, 80H; 测AL中第7位
    JNZ T_ ALARM; D7=1, 转温度报警
    TEST AL, 40H; 测D6位
    JNZ P_ ALARM; D6=1, 转压力报警

移位指令(破坏性移位)

算术左移SAL(无符号数)
  • 格式: SAL 目的,计数值
    SAL AH,1
    SAL AH,CL(当计数值大于1时,数要先传入CL)
    SAL BYTE PTR [BX] ,1
    在这里插入图片描述
逻辑左移SHL(有符号数)
  • 格式: SHL目的,计数值
    SHL AH, 1
    SHL AH, CL

  • 1)CF总是被移出的高位,两者均属于破坏性移位
    2)左移1位,相当于乘2
    3)移位次数为1时,若最高位被改变,0F=1,否则0F=0(按有符号位相当于溢出)
    逻辑右移SHR

格式: SHR目的,计数值
右移1次,无符号数相当于除以2 (余数丢弃)

MOV AL, 10000110B ; AL=134
SHR AL, 1; AL=67
SHR AL, 1; AL=33, CF=1

在这里插入图片描述

算数右移SAR

格式: SAR目的,计数值;
右移1次,有符号数相当于除以2
例:

MOV AL, 80H; AL=10000000B- -128 
MOV CL, 03H
SAR AL, CL ; AL=11110000B-F0H=-16

在这里插入图片描述

循环移位指令

ROL 循环左移

在这里插入图片描述
ROR循环右移
在这里插入图片描述
RCL带进位循环左移
在这里插入图片描述
RCR带进位循环右移
在这里插入图片描述

  • 循环移位指令的应用
    1.用于某些状态位的测试
    2.高位部分和低位部分的交换
    3.特定应用程序跑马灯等

你可能感兴趣的:(汇编语言)