(三)逻辑运算指令和串操作指令

来源:互联网 发布:数据大魔王txt离线下载 编辑:程序博客网 时间:2024/04/28 08:54
逻辑运算指令
运算规则:
按位操作,无进位、借位
(1)逻辑“与”AND
对两个操作数进行按位逻辑“与”操作
格式:AND dest,src
用途:保障刘操作数的某几位,清零其它位
(2)逻辑“或”OR
格式:OR dest,src
用途:对操作数的某几位置1;对两个操作数进行组合
把AL中的非压缩BCD码变成相应十进制数的ASCII码。 
     OR  AL, 30H
(3)逻辑“非”(取反)NOT
对操作数进行按位逻辑“非”操作
格式:NOT mem/reg
(4)逻辑“异或”XOR
对两个操作数按位进行“异或”操作
格式:XOR dest,src
用途:对reg清零(自身异或)
      把reg/mem的某几位变反(与1异或)
(5)测试指令TEST
操作与AND指令类似,但不将“与”的结果送回,只影响标志位
TEST指令常用于位测试,与与条件转移指令一起用。
(6)非循环移位指令
算术左移指令SAL(Shift Arithmetic Left)
算术右移指令SAR(Shift Arithmetic Right)
逻辑左移指令SHL(Shift Left)
逻辑右移指令SHR(Shift Right)
这四条指令的格式相同,以SAL为例:
SAL mem/reg,CL/1
算术移位----把操作数看做有符号数
逻辑移位----把操作数看做无符号数
移位位数放在CL寄存器中,如果只移1位,也可以直接写在指令中
(7)循环移位指令
不含进位位的循环左移指令ROL
不含进位位的循环右移指令ROR
含进位位的循环左移指令
含进位位的循环右移指令
*格式同非循环移位指令
*移位位数放在CL寄存器中,如果只移1位,也可以直接写在指令中
*循环移位指令只影响标志位CF/OF


串操作指令
串:顺序放在内存中的一组相同类型的数据
串操作:对串中的元素进行相同的操作
串操作的寻址方式:
源操作数指针——DS:SI
目的操作数指针---ES:DI
每次串操作后:
串操作指令自动修改SI和DI——字节加减1,字加减2,DF标志加减,DF=0.递增,否则,递减。(注意:退出串操
作后,指针指向最后操作的元素的下一个元素)
可完成两个存储单元之间的传送和比较操作
重复前缀
有的串操作指令前面可加上重复前缀REP。当使用REP前缀时,该指令重复执行,重复执行的次数由CX决定
重复前缀包括:
REP     CX!=0时重复执行
REPE/REPZ      CX!=0并且ZF=1时重复执行
REPNE/REPNZ    CX!=0并且ZF=0时重复执行
1.串传送指令MOVSB/MOVSW
MOVSB: ((ES):(DI))<--((DS):(SI))  SI加减1,DI加减1
MOVSW:((ES):(DI+1)(DI))<--((DS):(SI+1)(SI)) SI加减2,DI加减2
2.串比较指令CMPSB/CMPSW
指令执行的操作为:
CMPSB:((DS):(SI))-((ES):(DI))  SI加减1,DI加减1
CMPSW:((DS):(SI+1)(SI))-((ES):(DI+1)(DI))
3.串扫描SCASB/SCASW
执行的操作:
对字节:(AL)-((ES):(DI))  DI加减1
对字:(AX)-((ES):(DI+1)(DI)) DI加减2
4.串装入指令LODSB/LODSW
执行的操作为:
对字节:(AL)<-((DS):(SI))  SI加减1
对字:(AX)<-((DS):(SI+1)(SI)) SI加减2
5.串存储指令STOSB/STOSW
指令的操作为:
对字节:((ES):(DI))<-(AL)  DI加减1
对字:((ES):(DI+1)(DI))<-(AX)  DI加减2
本指令用于把一块存储区域填充成某一初始值
存储区域的首地址要预先设置带ES:DI中
要存储到串中的数据要预先存到AL(AX)中
0 0
原创粉丝点击