基本指令系统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:
- 实现AL高4位和BL低4位组合
AND AL, F0H
AND BL, 0FH
OR AL, BL
- 寄存器的第3、4位变反
XOR AL, 18H
- 寄存器AL的第3、4位清0,其余位保持不变
AND AL, E7H
- 将寄存器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)
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
eg:AL:10100011B $\stackrel{循环左移1位}{\longrightarrow}$ 01100111B,CF=1
循环右移
格式:ROR DEST, COUNT
功能:把(DEST)循环右移COUNT位,从低位移出的数据位补充到高位,移出的最高位保存在CF
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执行一次空操作,占有山歌节拍,不做任何操作,不影响任何寄存器、内存单元和标志位
可用于时延较短的延时程序中,也可以在调试程序时用于覆盖其他指令