8086逻辑运算和移位
一、邏輯運(yùn)算指令A(yù)ND/OR/NOT/XOR/TEST(與,或,非,異或,測(cè)試)
①與,或,非,異或
這邊大家都知道,這里不在重復(fù),舉幾個(gè)例子:
AND AX,1000H??????? ;AX中的16位數(shù)和1000H相與,結(jié)果送到AX中。
OR AX,00F0H???????? ;AX中的值與00f0相或,結(jié)果在AX中
NOT AL?????????????????? ;AL中的內(nèi)容求反碼,結(jié)果在AL中
XOR AL,0FH??????????? ;AL和0fh相異或,結(jié)果在AL中
②測(cè)試TEST
測(cè)試指令執(zhí)行AND指令操作,把OF,和CF標(biāo)志清0,修改SF,ZF和PF標(biāo)志,TEST指令不會(huì)送操作結(jié)果,而僅僅影響標(biāo)志
TEST AL,01?????????? ;如AL的最低位為1,則ZF=0,否則ZF=1
注意:
①在程序設(shè)計(jì)中,用AND指令對(duì)指定位清0
②OR指令對(duì)指定位置置1
③NOT指令常用來將某個(gè)數(shù)據(jù)取反碼,再加上1便得到補(bǔ)碼
④XOR常用來取反某位,0變?yōu)?,1變?yōu)?
⑤TEST指令用來檢測(cè)指定位是1還是0
二、移位指令SAL/SAR/SHL/SHR/ROL/ROR/RCL/RCR
1)非循環(huán)移位指令SAL/SAR/SHL/SHR
算術(shù)移位指令SAL,SAR???? (A:算術(shù))
邏輯移位指令SHL,SHR???? (H:邏輯)
注意:邏輯移位指令執(zhí)行時(shí),實(shí)際上是把操作數(shù)看成無符號(hào)數(shù)進(jìn)行移位,所以,右移時(shí)最高位添0,;算術(shù)移位指令執(zhí)行時(shí),則將操作數(shù)看成有符號(hào)數(shù)進(jìn)行移位,所以,右移時(shí)保持最高位的值不變,這里的最高位就是符號(hào)位。
所有移位指令執(zhí)行時(shí),都會(huì)影響標(biāo)志位CF,OF,PF,SF,ZF.
所有移出的位都會(huì)在符號(hào)位里面。
2)循環(huán)移位指令ROL/ROR/RCL/RCR
循環(huán)分小循環(huán)和大循環(huán),
小循環(huán)就是不帶進(jìn)位的循環(huán):ROL/ROR
大循環(huán)就是帶進(jìn)位的循環(huán):RCL/RCR
循環(huán)移位指令影響CF和OF標(biāo)志。
按照移入的位設(shè)置進(jìn)位標(biāo)志CF
進(jìn)行1次移位后,如果移位前的操作數(shù)最高位與移位后操作數(shù)的最高位不同(有變化),則OF=1;否則OF=0。
總結(jié)
以上是生活随笔為你收集整理的8086逻辑运算和移位的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux中的线程函数
- 下一篇: 数据的多段存储