基本指令系统2

位操作指令

逻辑运算、移位等功能

逻辑运算指令

完成与、或、非、异或

逻辑与

格式:AND DEST, SRC

功能:DEST←(DEST)$\land$(SRC)

逻辑或

格式:OR DEST, SRC

功能:DEST←(DEST)$\lor$(SRC)

逻辑异或

格式:XOR DEST, SRC

功能:DEST←(DEST)$\oplus$(SRC)

前三个操作均为双操作数指令

逻辑非

格式:NOT DEST

功能:DEST←$\neg$(DEST)

逻辑运算应用

取位操作

AND AL, 0FH : 将(AL)的高4位清0,保留低4位(相当于提取AL值的低4位),0FH相当于取位模板

AL:10100011B→00000011B

置位操作

OR AL, 11H : 通过或运算把(AL)的第0、4位置为1,同时不影响其他位,11H相当于置位模板

AL:00001000B→00011001B

位变反操作

XOR AL, 00100010B : 通过异或运算把(AL)的第1、5位变反,同时不影响其他数据位

AL:01110101B→01010111B

eg:

  1. 实现AL高4位和BL低4位组合
AND AL, F0H
AND BL, 0FH
OR AL, BL
  1. 寄存器的第3、4位变反
XOR AL, 18H
  1. 寄存器AL的第3、4位清0,其余位保持不变
AND AL, E7H
  1. 将寄存器AL的第3、4位置1,其余位保持不变
OR AL, 18H

测试指令

格式:TEST DEST, SRC

功能:(DEST)$\land$(SRC),与AND指令几乎完全一样,唯一区别是TEST指令不保存运算结果

可以用来判断第几位是否为0或1,通过ZF标志来判别(AL)的某一位上是0还是1,通常与条件转移指令结合使用

CMP使用数值比较来影响标志位,TEST通过数据位测试来影响标志位

移位/循环移位指令

共同指令格式:OPR DEST, COUNT

  • OPR:操作助记符,指明移位的方式
  • DEST:目的操作数地址,必须为通用寄存器或存储单元,可以为字节、字
  • COUNT:移位次数

算术移位指令

算术左移

格式:SAL DEST, COUNT

功能:将(DEST)左移COUNT位,移出的最低位保存到CF标志,空出的低位补0

COUNT为1时可以用常数表示,大于1需要用CL寄存器中的内容表示

==每左移一位相当于操作数乘以2==(左移后被舍弃的高位不含1)

image-20220416205937222.png

eg:AL:10100011B $\stackrel{左移3位}{\rightarrow}$ 10011000B,CF=1(最开始的第三位)

算术右移

格式:SAR DEST, COUNT

功能:将(DEST)右移COUNT位,移出的最高位保存到CF标志,空出的高位则补充原来的符号位

eg:AL:10100011B $\stackrel{右移2位}{\longrightarrow}$ 11101000B,CF=1(倒数第2位)

逻辑移位指令

针对无符号数

逻辑左移

格式:SHL DEST, COUNT

功能:将(DEST)左移COUNT位,移出的最低位保存到CF标志,空出的低位补0

与SAL实际上是同一条指令,机器指令代码完全一致

逻辑右移

格式:SHR DEST, COUNT

功能:将(DEST)右移COUNT位,移出的最高位保存到CF标志,空出的高位则补充0

循环移位指令

循环左移

格式:ROL DEST, COUNT

功能:把(DEST)循环左移COUNT位,从高位移出的数据位补充到低位,移出的最低位保存在CF

image-20220416210655223.png

eg:AL:10100011B $\stackrel{循环左移1位}{\longrightarrow}$ 01100111B,CF=1

循环右移

格式:ROR DEST, COUNT

功能:把(DEST)循环右移COUNT位,从低位移出的数据位补充到高位,移出的最高位保存在CF

image-20220416211110776.png

eg:AL:10100011B $\stackrel{循环右移2位}{\longrightarrow}$ 10101100B,CF=1

处理器控制指令

用于设置标志位、控制CPU运转、空操作指令

标志位操作指令

清除进位标志

格式:CLC

功能:将CF标志清0

进位标志置位

格式:STC

功能:将CF标志置1

进位标志取反

格式:CMC

功能:CF标志位取反

清楚方向标志

格式:CLD

功能:DF标志位清0

方向标志置位

格式:STD

功能:DF标志位置1

清除中断标志

格式:CLI

功能:IF标志位清0,关闭CPU处理可屏蔽中断的硬件开关

中断标志置位

格式:STI

功能:IF标志位置1,打开CPU处理可屏蔽中断的硬件开关

==小结==:

  • 进位标志CF:清除、置位、取反指令
  • 方向标志DF:清除、置位指令
  • 中断标志IF:清除、置位指令

空操作指令

格式:NOP

功能:使CPU执行一次空操作,占有山歌节拍,不做任何操作,不影响任何寄存器、内存单元和标志位

可用于时延较短的延时程序中,也可以在调试程序时用于覆盖其他指令

最后修改:2022 年 07 月 29 日
如果觉得我的文章对你有用,请随意赞赏