数据处理位操作和字符串操作指令
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
XOR dest,src ;逻辑或:dest←dest src
设置CF=OF=0
影响SF,ZF和PF
01000101
00110001
真值表
01110100
ABT 000 011 101 110
异或门电路
A B
T
逻辑表达式
T=AB
6
〔例〕逻辑运算程序-1
;定义数据段: varA dword 11001010000111100101010101001101B varB dword 00110111010110100011010111100001B varT1 dword ? varT2 dword ? mov eax,varA
NOT reg/mem ;逻辑非:reg/mem←~reg/mem 不影响状态标志位
非门电路
~ 01000101 真值表 10111010
AT 01 10
A
T
逻辑表达式
T=A
5
4. 逻辑异或指令XOR
逻辑异或(逻辑半加)运算规则:
两位不同(相异),则结果是1;否则,结果是0
逻辑异或指令XOR:
按位进行逻辑异或,结果返回目的操作数
8
〔例〕逻辑运算程序-2
mov eax,varA xor eax,varB
ABABAB
; EAX=11111101010001000110000010101100B
mov varT2,eax
;
mov eax,varT1 ; 二进制形式显示VART1
call dispbd
call dispcrlf ; 换行显示
AND与TEST?
TEST与CMP?
12
3.6.2 移位指令
逻辑左移指令 SHL 逻辑右移指令 SHR 算术左移指令 SAL 算术左移指令 SAR
不带进位循环左移指令 ROL 不带进位循环右移指令 ROR 带进位循环左移指令 RCL 带进位循环右移指令 RCR
S: Shift R: Rotate L: Left R: Right A: Arithmetic C: Carry flag
mov eax,varT2 ; 二进制形式显示VART2
call dispbd
运行结果 9
11111101010001000110000010101100 11111101010001000110000010101100
10
逻辑运算的屏蔽作用
AND指令复位某些位(同0与),不影响其他(同1与) OR指令置位某些位(同1或),不影响其他(同0或) XOR求反某些位(同1异或),不影响其他(同0异或) and bl,11110110b ;BL中D0和D3清0,其余位不变 or bl,00001001b ;BL中D0和D3置1,其余位不变 xor bl,00001001b ;BL中D0和D3求反,其余位不变
置位Set:置1
复位Reset:清0,清除Clear
大写=小写 AND DFH 小写=大写 OR 20H
xor eax,eax
sub eax,eax mov eax,0
11
5. 测试指令TEST
按位进行逻辑与运算,不返回逻辑与结果 TEST dest,src ;作逻辑与运算:dest src
TEST指令像AND指令一样来设置状态标志 TEST指令常用于检测一些条件是否满足,一般后跟条 件转移指令,目的是利用测试条件转向不同的分支
使OF=CF=0 根据结果按定义影响ZF、SF和PF
2
1. 逻辑与指令AND
逻辑与(逻辑乘)运算规则:
两位都是逻辑1,则结果是1;否则,结果是0
逻辑与指令AND:
按位进行逻辑与,结果返回目的操作数
AND dest,src ;逻辑与:dest←dest src
设置CF=OF=0
影响SF,ZF和PF
13
1. 移位指令
分逻辑(Logical)和算术(Arithmetic)移位 具有左移(Left)或右移(Right)操作 SHL reg/mem,i8/CL
;逻辑左移:最低位补0,最高位进入CF
SHR reg/mem,i8/CL
;逻辑右移:最高位补0,最低位进入CF
SAL reg/mem,i8/CL
;算术左移,与SHL是同一条指令
SAR reg/mem,i8/CL
;算术右移:最高位不变,最低位进入CF
3.6 位操作类指令
计算机中最基本的数据单位是二进制位 针对二进制位进行操作、实现位控制的指令
逻辑运算指令 移位指令 …… 进行一位或若干位处理,采用位操作类指令
1
3.6.1 逻辑运算指令
逻辑与指令 AND 逻辑或指令 OR 逻辑非指令 NOT 逻辑异或指令 XOR 测试指令 TEST
除NOT指令不影响标志外 其他逻辑指令
; EAX=11001010000111100101010101001101B not eax
; EAX=00110101111000011010101010110010B and eax,varB
; EAX=00110101010000000010000010100000B
7
mov ebx,varB ; EBX=00110111010110100011010111100001B not ebx ; EBX=11001000101001011100101000011110B and ebx,varA ; EBX=11001000000001000100000000001100B or eax,ebx ; EAX=11111101010001000110000010101100B mov varT1,eax
01000101
00110001
00000001
真值表
ABT 000 010 100 111
与门电路
A B
T
逻辑表达式
T=A·B
3
2. 逻辑或指令OR
逻辑或(逻辑加)运算规则:
两位都是逻辑0,则结果是0;否则,结果是1
逻辑或指令OR:
按位进行逻辑或,结果返回目的操作数
OR dest,src ;逻辑或:dest←dest src
设置CF=OF=0
影响SF,ZF和PF
01000101
00110001
01110101
真值表
ABT 000 011 101 111
或门电路
A B
T
逻辑表达式
ห้องสมุดไป่ตู้
T=A+B
4
3. 逻辑非指令NOT
逻辑非(逻辑反)运算规则: 原来为0的位变成1,原来为1的位变成0
逻辑非指令NOT: 按位进行逻辑非,结果返回操作数