第3章-5逻辑移位
第三章 指令系统--指令
寻址方式指令系统
数据传送指令算术运算指令逻辑运算指令串操作指令
控制转移指令处理器控制指令
通用传送指令
累加器专用传送指令
地址传送指令
标志传送指令
对标志位的影响: 除SAHF和POPF指令外,其余的所有数据传送类指令
格式:
功能:
操作数类型:
DS,100H
用
堆栈:执行
PUSH
POP
SS指向堆栈段的起始位置SP指定栈顶
PUSH AX PUSH DS POP DS POP AX
格式:
oprd1,
立即数、段寄存器和
不影响
通用传送指令
累加器专用传送指令地址传送指令
标志传送指令
LEA (Load Effective Address)
LDS (Load pointer into register and DS) LES (Load pointer into register and ES)
LEA LEA
LEA
数据传送指令算术运算指令逻辑运算指令串操作指令
控制转移指令处理器控制指令
实现二进制
所有算术运算指令均所有算术运算指令均
四则运算是计算机经常进行的一种操作。
请注意算术运算指令对
只有一个操作数:寄存器或存储单元对操作数加
用于计数器和地址指针的调整
不影响进位
对操作数减
用于计数器和地址指针的调整不影响进位。
微机原理第三章5
(4)SHR AL, 1
29
• 已知(AL)=0B4H=10110100B,(CF)=1。
(1)SAL AL, 1 ;移位后(AL)= 68H=01101000B, CF=1
(2)SAR AL, 1 ;移位后(AL)=0DAH=11011010B, CF=0
(3)SHL AL, 1 ;移位后(AL)= 68H=01101000B, CF=1
3.3.4 串操作指令
• 串操作指令 :
• 数据传送类指令每次只能传送一个数据,若要传 送大批数据就需要重复编程,这样就浪费了大量的时 间和空间。 为此8086提供了一组处理主存中连续存放数据串 的指令,这就是串操作指令。
•
针对数据块或字符串的操作; 可实现存储器到存储器的数据传送;
待操作的数据串称为源串,目标地址称为目标串。
ROLÖ · Á î µ Ä Ñ º ²³ ó Ò Æ ² Ø ³ ô
D15ò º D7 D0 CF
RORÖ · Á î µ Ä Ñ º ²Ó Ò Ò Æ ² Ø ³ ô
32
通过进位的循环指令图解
CF D15ò º D7 D0
RCLÖ · Á î Ä µ ´ ÷ ¼ ÷ Î º Ñ º ²ó ³Ò Æ ² Ø ³ ô
34
[例 ]
• 循环指令举例
ROL BX,CL
; 将 BX 中的内容不带进位循环左移 CL 中规定 的次数 ROR WORD PTR[SI],1
;将物理地址为 DS*16+SI单元的字不带进位循 环右移1次
35
[例 ]
• 设CF=1, AL = 1011 0100B = 0B4H 若执行指令ROL AL, 1 ;则AL=? CF=?, OF=? 若执行指令ROR AL, 1 ;则AL= ? CF=?, OF=? 若执行指令RCR AL, 1 ;则AL=? CF=?, OF=? 若执行指令MOV CL, 3 RCL AL, CL ;则AL=?, CF=?, OF=?
第3章指令系统2
串操作指令说明
针对数据块或字符串的操作; 可实现存储器到存储器的数据传送; 待操作的数据串称为源串,目标地址称为
目标串。
38
串操作指令的特点
源串一般存放在数据段,偏移地址由SI指定。允许段 重设;
目标串必须在附加段,偏移地址由DI指定; 指令自动修改地址指针,修改方向由DF决定。
┇
1000H 12H 34H 56H 78H
┇
3000H
┇
31
程序例
MOV SI,1000H MOV DI,3000H
PUSH CX MOV CL,4 SHR AL,CL
MOV CX,4
OR AL,30H
BBB:MOV AL,[SI]
MOV [DI],AL
MOV BL,AL
INC DI
AND AL,0FH
JMP DONE FOUND:DEC DI MOV DATA2,DI INC DI SUB DI,BX DONE:MOV DATA1,DI …
51
串装入指令
格式:
LODS OPRD LODSB LODSW
操作:
对字节: AL
[DS:SI]
对 字: AX
[DS:SI]
52
4. 串装入指令
用于将内存某个区域的数据串依次装入累加 器,以便显示或输出到接口。
目标 操作数
执行与CMPS指令相似的操作,只是这里的源 操作数是AX或AL
49
串扫描指令的应用
常用于在指定存储区域中寻找某个关键字。
50
P131例3-38
MOV DI,2000H MOV BX,DI MOV CX,0AH MOV AL,’A’ CLD REPNZ SCASB JZ FOUND MOV DI,0
计算机组成第3章
逻辑移位: 逻辑左移n位的执行方法,是把原来
的数中每一位都向左移动n个位置,左面移出的高位
丢弃不要,右面低位空出的位置上全部补"0"。 逻辑 右移n位的执行方法是把原来数中的每一位都向右移
动n个位置,右面移出的低位丢弃不要,左面高位空
出的位置上全部补0。
算术移位应保持数的符号不变,而数值的大小
则要发生变化。左移一位使数值增大一倍,相当于
(2)原码一位乘法算法流程图:
开始
0→P0,0→i
N Y
yn=1? Pi+0→Pi
Pi右移一位,i+1→i
Pi+x→Pi01
y=-0.1011 [X]原= 0.1101 [Y]原= 1.1011
Ps=Xs⊕Ys=0⊕1=1
[x · 原=1.10001111 y]
(1)运算方法
设被乘数 x、乘数 y 是 n 位定点小数,并且为正数
x=0.x1x2…xn, y=0.y1y2…yn 乘积可表示为:x· y=x(0.y1y2…yn) =x(y12-1+y22-2+…yn2-n) =2-1(y1x+2-1 ( y2x+2-1 (…+2-1 (yn x+0)…))) 递推公式: P0=0
比较结果 Yn-1 Yn Yn+1 0 0 0 0
0 0 1 1 1 1
+0,
右移2位
0
1 1 0 0 1 1
1
0 1 0 1 0 1
+[X]补, 右移2位
+[X]补, 右移2位 +2[X]补,右移2位 +2[-X]补,右移2位 +[-X]补, 右移2位 +[-X]补, 右移2位 +0, 右移2位
2.5.3 逻辑运算和移位指令
类 别 指令 名称
‘非’(字/字节) NOT
指令书写格式 (助记符)
目标
状态标志位 O S Z A P C -
‘与’(字/字节)
AND
OR XOR TEST
目标,源
目标,源 目标,源 目标,源
0
0 0
X
X X
X
X X
U
U U
X
X X
0
0 0
逻辑 ‘或’(字/字节) 运算 ‘异或’(字/字节)
2.5.4 串操作指令
类 别 指令 名称
字节串/字串传送 字节串/字串比较
指令书写格式 (助记符)
MOVS 目标串,源串
状态标志位 O S Z A P C -
MOVSB/MOVSW
CMPS 目标串,源串 CMPSB/CMPSW SCAS 目标串 SCASB/SCASW LODS 源串 LODSB/LODSW 存字节串/字串 STOS 源串 STOSB/STOSW REP
CF ← 7/15 RCL 0
(4)带进位循环右移指令——RCR
CF → 7/15 RCR 0
注:
• 1. OF 只有当计数值=1才有效,当目标操作数的 最高位0->1或1->0时:OF=1,其他OF=0 • 2. 循环移位指令只影响OF和CF标志位 • 3. 算术移位指令:相当于有符号数运算,其中, SAL n位~×2n SAR n位~/ 2n • 4. 逻辑移位指令:相当于无符号数运算,其中, SHL n位~× 2n SHR n位~/ 2n
格式:①STOS ②STOSB ③STOSW
指令功能:
1.将AX/AL寄存器内容写入目标串中,地址由DI所 指向;
逻辑运算和移位指令
奇数处理
… EVEN:偶数处理 检测(AL)的最低位是否为0,若为0转EVEN
6
3、OR(Lgical inclusive or )逻辑“或”指令
∧ 格式:OR dset, src;(dset)←(dset) dest: 寄存器、存储器。 (src)
src: 立即数、寄存器、存储器。
执行操作: 进行按位“或”运算 两位操作数中任一位为1(或都为1), 则该位(结果)=1, 否则为0。
19
执行操作:相当于无符号数的×2功能。
SHL/SAL指令操作示意图如下图所示:
dest
CF
0
指令格式举例: SHL AH,1
SAL SI, CL
SAL WORD PTR [BX+5] ,1 SHL BYTE PTR , CL
20
(2)、SHR (Shift logical right )逻辑右移指令
否则:无变化时,OF = 0
CF根据各条指令的规定设置。 SF、ZF、PF,AF无定义。
↕
↕
↕
循环移位指令:SF、ZF、PF、AF不影响。
OF、CF影响情况在指令中讲:
ROL、 RCL影响标志OF、CF情况相同 ;
ROR 、 RCR影响标志OF、CF情况相同 。
18
1、 算逻移位指令( 4条 ) : SHL , SHR, SAL , SAR
dest: 寄存器、存储器。
执行操作:进行“与”运算, 两位中有一位为0(或二位都为0),则结 果 为0,否则为1。
操作类型举例: AND AL, 0FH AND CX, DI AND AND SI, MEM_NAME ALPHA [DI], AX ;寄存器 ∧ 立即数 ; 寄存器 ∧ 寄存器 ; 寄存器 ∧ 存储器 ; 存储器 ∧ 寄存器
c语言 逻辑位移
逻辑位移是C语言中的一种位运算符,用于将一个整数的二进制表示向左或向右移动指定的位数。
逻辑位移操作符有两种:左移(<<)和右移(>>)。
1. 左移(<<):将一个整数的二进制表示向左移动指定的位数,右边用0填充。
例如,将数字5(二进制表示为101)左移2位,得到的结果为20(二进制表示为10100)。
```c
#include <stdio.h>
int main() {
int num = 5;
int result = num << 2;
printf("左移结果:%d
", result);
return 0;
}
```
2. 右移(>>):将一个整数的二进制表示向右移动指定的位数,左边用符号位填充。
例如,将数字-5(二进制表示为11111111111111111111111111111011)右移3位,得到的结果为-16(二进制表示为11111111111111110000000000000000)。
```c
#include <stdio.h>
int main() {
int num = -5;
int result = num >> 3;
printf("右移结果:%d
", result);
return 0;
}
```。
微机原理实验三逻辑移位指令操作
实验三
实验目的(要求):巩固练习逻辑移位指令,及串操作指令
实验原理:
实验仪器:DEBUG、微型计算机
实验要求:所有实验内容均需抓图说明。
实验内容:
1.练习逻辑及移位指令
2.练习串操作相关指令,掌握指令及重复前缀的使用规则
3.完成课后习题3-13(编写出程序片段)
(附加阅读)写出完整汇编源程序,对字符串进行操作时,确定它的长度。
要求以或$作为字符串结束标志。
(提示)-----计算串长的子程序-----
STRLEN PROC
LEA DI,STRING
MOV CX,0FFFFH ;(CX)=-1
MOV AL,CR ;(AL)=0DH
MOV AH,’$’;(AH)=24H
CLD ;DF=0
AGAIN: INC CX ;串长加1,初始值(CX)=0 CMP CX,100H
JAE DONE ;串长>255,则结束
CMP [DI],AH ;本字符是’$’?
JE DONE ;是,则结束
SCASB;本字符是CR?
JNE AGAIN ;未找到,返回继续
DONE: MOV LENGTH1,CX ;找到,LENGTH1←串长RET ;返回主程序
STRLEN ENDP。
5--逻辑运算和移位指令 (1)
三、逻辑运算和移位指令逻辑运算和移位指令逻辑运算指令AND DST,SRC 逻辑与指令OR DST,SRC 逻辑或指令XOR DST,SRC 逻辑异或指令TEST DST,SRC 测试指令NOT OPR 逻辑非指令移位指令SHL OPR,CNT 逻辑左移指令SAL OPR,CNT 算术左移指令SHR OPR,CNT 逻辑右移指令SAR OPR,CNT 算术右移指令ROL OPR,CNT 左循环移位指令ROR OPR,CNT 右循环移位指令RCL OPR,CNT 带进位左循环移位指令RCR OPR,CNT 带进位右循环移位指令SHLD DST,REG,CNTSHRD DST,REG,CNT逻辑运算指令(1)AND 逻辑与指令格式:AND DST ,SRC功能:(DST)←(DST)∧(SRC)(按位与)操作数:通用寄存器立即数存储器AND MEM , IDATAAND REG , IDATAAND REG , MEMAND MEM , REGAND REG , REG对标志寄存器的影响:1)CF=OF=0;2)根据运算结果设置SF、ZF、PF标志;3)AF无定义。
说明:1)利用AND指令,可以保留特定位(与1),同时屏蔽掉其它位(与0),以检测特定位。
2)利用AND指令,可以将某些特定位设置为0(与0),同时使其余位保持原值不变化(与1)。
3)一个寄存器和自身进行逻辑与运算,该寄存器内容不变。
但该运算影响了SF、ZF、PF三个标志位,并使OF和CF清零。
利用该特性,可以判断一个数据的正负、是否为零、以及数据的奇偶性。
格式:OR DST ,SRC功能:(DST)←(DST)∨(SRC)(按位或)操作数:通用寄存器立即数存储器OR MEM , IDATAOR REG , IDATAOR REG , MEMOR MEM , REGOR REG , REG对标志寄存器的影响:1)CF=OF=0;2)根据运算结果设置SF、ZF、PF标志;3)AF无定义。
微机原理第3章习题(答案)
微机原理第3章习题(答案)1. 下列各条指令是否有错?如果有,请指出错误之处并改正(1)MOV DS,1000H(2)MOV [100],23H(3)ADD AX,[BX+BP+6](4)PUSH DL(5)IN AX,[3FH](6)OUT 3FFH,AL(7)LES SS,[SI](8)POP [AX](9)IMUL 4CH(10)SHL BX,5(11)INT 300(12)XCHG DX,0FFFH答:(1)错误。
不允许直接向段寄存器送立即数,可改为:MOV AX,1000HMOVDS,AX(2)错误。
该指令在语法上是对的,即可以把一个立即数送入一个存储单元;但是如果考虑实际编译,则第一操作数前应加上BYTE PTR 或WORD PTR 说明,否则汇编程序会因不能确定操作数长度而指示出错。
可改为:MOV BYTE PTR [100],23H(3)错误。
不能同时使用两个基址寄存器BX、BP 进行间接寻址,可改为:ADD AX,[BX+DI+6] (4)错误。
堆栈操作应以字为单位进行,而DL 是一个字节。
可改为:PUSH DX(5)错误。
在输入/输出指令中,8 位端口地址应直接写在操作数处。
可改为:IN AX,3FH(6)错误。
端口地址3FFH 已超出8 位二进制表示范围,16 位端口地址应用DX。
可改为:MOV DX,3FFH OUT DX,AL(7)错误。
LES 指令的目操作数应该是通用寄存器,不能是段寄存器。
可改为:LES BX,[SI](8)错误。
AX 不能用于间接寻址,间接寻址只能用BX、BP、SI、DI 四个寄存器之一。
可改为:POP [BX](9)错误。
立即数不能做乘法指令的操作数,可改为:MOV BL,4CH IMUL BL(10)错误。
当逻辑移位的次数大于1时,应该用CL指示次数。
可改为MOV CL,5 SHL BX,CL (11)错误。
操作数300 > 255,已超出有效的中断类型码范围。
逻辑移位
TEST BX,1
TEST BYTE PTR [20H],20H TEST AL,30H TEST BYTE PTR [DI],12H
【例】测试AL的最高位是0/1? TEST AL,80H JZ XXX (JNZ XXX ;是0则跳转 ;是1则跳转)
【例】测试DX的低4位是0/1? TEST DX,0FH JZ XXX ;是0则跳转
AND
AND AND
BYTE PTR [20H],20H
AL,30H BYTE PTR [DI],12H
**** ****
【例】屏蔽AL的0,1两位。 ∧ 1111 1100
AND
AL,0FCH
**** **00
【例】将AH的高4位清0。 AND AH,0FH
**** ****
∧ 0000 1111
OR
OR OR
BYTE PTR [20H],20H
AL,30H BYTE PTR [DI],12H
**** ****
【例】将AL的0,1两位置1。 ∨ 0000 0011
OR
AL,03H
**** **11
【例】将AH的高4位置1。 OR AH,0F0H
**** ****
∨ 1111 0000
1111 **** **** **** **** ****
例如: AND AND AND AND AND AX,BX CL,[SI] [BX][DI-10H],WORD PTR 80H CH,AL BX,1
AX,BX CX,DX SI,DI BP,SP
AH,AL BH,BL CH,CL DH,DL
立即数 OF=CF=0,其它标志位受影响 d、s必须具有相同的字长 AND AX, BL d、s不能为段寄存器 AND DS, 2000H d不能是立即数 AND 10H, AX
逻辑移位名词解释
逻辑移位名词解释
嘿,你知道啥是逻辑移位不?这可真是个超级有趣的概念啊!比如说,就像搭积木一样,本来积木好好地在那堆着,突然你把其中一块
挪到了别的地方,整个结构就不一样了啦!逻辑移位差不多就是这样
的感觉呀!
想象一下,你正在解一道数学题,按照常规的思路一步一步来,突
然你发现,咦,如果我把这个条件换个位置,或者把这个步骤提前,
哇塞,一下子就有新的解法出现了呢!这就是逻辑移位在起作用呀!
再打个比方,好比你在走一条路,一直沿着原来的方向走,突然你
脑子一转,诶,我为啥不换个方向走走看呢,说不定有新的风景呢!
这也是一种逻辑移位嘛!
我记得有一次和朋友们玩游戏,我们都按照老一套的方法玩,结果
老是玩不过去。
这时候我就提议,要不咱们试试把规则稍微变一变,
把一些步骤调换一下顺序。
嘿,你猜怎么着,一下子就变得超级好玩,而且还顺利过关了呢!这就是逻辑移位带来的神奇效果呀!
逻辑移位可不只是在游戏里有用哦,在生活中也是处处可见呢!比
如说工作中遇到难题了,别死脑筋地一直用原来的方法呀,试着换个
角度思考,把一些因素的位置换换,说不定就能找到新的解决办法呢!
在学习中也是一样呀,老是用一种学习方法可能效果不好,那为啥
不试试换一种呢?就像把知识的排列顺序变一变,说不定就能更好地
理解和掌握啦!
总之呢,逻辑移位就是让我们打破常规,大胆尝试新的组合和顺序,去发现更多的可能性!它能让我们的思维更加灵活,让我们的生活更
加丰富多彩!所以呀,别老是一成不变啦,时不时地来个逻辑移位,
给自己的生活加点料吧!。
课件:第3章 8086指令系统_加减运算指令比较指令52
1
3.4 通用指令
1.概述 Intel 8086指令系统共有117条基本指令,按照指令功能, 可分位6类指令: ① 数据传送类指令。 ② 算术运算指令。 ③ 逻辑移位指令。 ④ 串操作指令。 ⑤ 控制转移指令。 ⑥ 处理机控制类指令。
2
3.4.2 算术运算指令
8086的算术运算指令包括二进制运算指令(加法、减法、 乘法和除法指令)和BCD码十进制调整指令。 算术运算指令用来执行算术运算,它们中有的是双操作 数指令,有的是单操作数指令。 双操作数指令是两个操作数中,除了源操作数为立即数 的情况外,必需有个操作数在寄存器中。单操作数指令不 允许使用立即数方式。
11
ADC指令的使用价值
主要用于由于数据较大(多字节),需要多 次运算的加法运算中。 例:有两个4字节的无符号数相加:
2D568F8CH+3C9E489BH=? 设 被加数存放在BUF1开始的存储区内
加数存放在BUF2开始的存储区内 要求和放回BUF1存储区
12
13
程序段: MOV CX,4 ;置循环次 数
10
(1)加法指令
②ADC带进位加法指令 指令格式:ADC DST, SRC 执行的操作: (DST)←(SRC)+(DST)+CF 目的操作数:8/16/32位的寄存器/存储器 源操作数:与目的操作数同类型的寄存器/存储器/立即数 指令功能:将源操作数与目的操作数以及进位标志位CF的 值相加,并将结果存放于目的操作数。
3.4.2 算术运算指令
算术运算指令涉及两种类型数据,即无符号 数和有符号数
对加法指令和减法指令而言,无符号和有符 号数可采用同一套指令,其先决条件有两 个:
一是参加的操作数必须同为无符号数或同为 有符号数 二是要采用不同标志位来检查无符号数和有 5
计算机组织与系统结构第三章习题答案
第 3 章习题答案2(4)高级语言中的运算和机器语言 (即指令) 中的运算是什么关系?假定某一个高级语P中有乘、言源程序除运算,但机器M中不提供乘、除运算指令,则程序P 能否在机器M上运行?为什么?参考答案:(略)3.考虑以下 C 语言程序代码:int func1(unsigned word){return (int) (( word <<24) >> 24);}int func2(unsigned word){return ( (int) word <<24 ) >> 24;}假设在一个32 位机器上执行这些函数,该机器使用二进制补码表示带符号整数。
无符号数采用逻辑移位,带符号整数采用算术移位。
请填写下表,并说明函数func1 和func2 的功能。
函数func1 的功能是把无符号数高24 位清零(左移24 位再逻辑右移24位),结果一定是正的有符号数;而函数func2 的功能是把无符号数的高24 位都变成和第25 位一样,因为左移24 位后进行算术右移,高24 位补符号位(即第25 位)。
4.填写下表,注意对比无符号数和带符号整数的乘法结果,以及截断操作前、后的结果。
5.以下是两段 C 语言代码,函数arith( ) 是直接用 C 语言写的,而optarith( ) 是对arith( ) 函数以某个确定的M和N编译生成的机器代码反编译生成的。
根据optarith( ) ,可以推断函数arith( ) 中M和N的值各是多少?#define M#define Nint arith (int x, int y){int result = 0 ;result = x*M + y/N;return result;}int optarith ( int x, int y){i nt t = x;x << = 4;x - = t;i f ( y < 0 ) y += 3;y>>2;r eturn x+y;参考答案:可以看出x*M 和“ int t = x; x << = 4; x-=t; ”三句对应,这些语句实现了x 乘15 的功能(左移 4 位相当于乘以16,然后再减 1 ),因此,M等于15;y/N 与“if ( y < 0 ) y += 3; y>>2; ”两句对应,功能主要由第二句“ y右移2位”实现,它实现了y除以4的功能,因此N是4。
第7讲逻辑移位与字符串指令
§3-5 逻辑运算和移位指令
循环移位指令操作示意图: 循环移位指令操作示意图:
13
§3-5 逻辑运算和移位指令
注意: 注意: 循环移位后:结果→目的操作数。 循环移位后:结果→目的操作数。 目的操作数可以是8 16位的寄存器、存储器,移位的次数可 目的操作数可以是8/16位的寄存器、存储器,移位的次数可 以是1,也可以由CL寄存器的值指定。 也可以由CL寄存器的值指定。 关于标志位: 关于标志位: ROL和ROR指令没有 ROL和ROR指令没有把进位标志CF包含在循环中;而RCL和 没有把进位标志CF包含在循环中;而RCL和 RCR指令把CF作为整个循环的一部分,一起参加循环移位。 RCR指令把CF作为整个循环的一部分,一起参加循环移位。 CF的值总是由最后一次被移出的值决定。 CF的值总是由最后一次被移出的值决定。 OF位只有在移位次数为1的时候才有效。在移位后最高有效 OF位只有在移位次数为1 位发生变化(由1 位发生变化(由1变0或由0变1)时,则OF置1,否则OF置0。 或由0 )时,则OF置 ,否则OF置 在多位循环移位时,OF值不确定。 在多位循环移位时,OF值不确定。
;对存储单元字节内容取反
3
§3-5 逻辑运算和移位指令
⑵ AND逻辑与指令(Logical AND) AND逻辑与指令 逻辑与指令(Logical 指令格式:AND 目的, 指令格式:AND 目的,源 指令功能:目的 指令功能:目的 目的∧ 目的∧源 主要用于使操作数的某些位保留 主要 用于使操作数的某些位保留 ( 和 “ 1” 相与 ) , 而使 某 用于使操作数的某些位保留( 相与) 而使某 些位清除( 些位清除(和“0”相与)。 相与) ⑶ OR逻辑或指令(Logical OR) OR逻辑或指令 逻辑或指令(Logical 指令格式:OR 目的, 指令格式:OR 目的,源 指令功能:目的 指令功能:目的 目的∨ 目的∨源 主要用于使操作数的某些位保留 主要 用于使操作数的某些位保留 ( 和 “0” 相或 ) , 而使 某 用于使操作数的某些位保留( 相或) 而使某 些位置位( 些位置位(和“1”相或)。 相或) 例 MOV AND OR AX, 3538H 3538H AX, 0F0FH AX,3030H AX,3030H ; AX ;AX 0508H 0508H 3538H 3538H
课件:第三章3.3-3逻辑与位移指令
循环移位时用移出位填入空位.带进位则是进位位填入空位.
如: 1111,1010 AL
CF=1
ROL AL,1 1111,0101 CF=1 RCL AL,1 1111,0101 CF=1
ROR AL,1 0111,1101 CF=0 RCR AL,1 1111,1101 CF=0
注意:1、它们都可以作字或者字节操作.
3.3 IBMPC 机的指令系统
逻辑指令 与位移指令
• 逻辑 • 指令
•
• SHR
•
• ROL
• RCR
AND 与 OR 或 NOT 非 XOR 异或 TEST测试
SHL SAL
SAR 位移 指令
由于逻辑运算是按位操作的。因此一般说来,其操作数
应该是一个位串。
AND DST,SRC (DST) (DST)Λ(SRC)
逻辑位移看作是对无符号数,算术位移看作是对带符号数,SAR相
当对带符号数除以2,但符号不能变,∴保留符号位值)
注意:1、它们都可以作字或者字节操作. 2、置标志位:它们都要影响CF位,都有数位移进CF。而OF位
只有当CNT位1时有效.当最高有效位移动后发生变化则OF位置1否则 置0. 根据结果置SF,ZF,PF位.AF位无定义.
不带符号数的187,带符号数的-69 (1011,1011) AL SAL AL,1 0111,0110 OF=1 CF=1 +116 SHL AL,1 0111,0110 CF=1 OF=1 118 SAR AL,1 1101,1101 CF=1 OF=0 -35 SHR AL,1 01011101 CF=1 OF=1 93
不保留结果,置条件码
与 CMP OPR, OPR2类似 OPR1-OPR2
逻辑运算和移位指令共37页文档
逻辑运算和移位指令、自信是人格的核心。
28、目标的坚定是性格中最必要的力 量泉源 之一, 也是成 功的利 器之一 。没有 它,天 才也会 在矛盾 无定的 迷径中 ,徒劳 无功。- -查士 德斐尔 爵士。 29、困难就是机遇。--温斯顿.丘吉 尔。 30、我奋斗,所以我快乐。--格林斯 潘。
46、我们若已接受最坏的,就再没有什么损失。——卡耐基 47、书到用时方恨少、事非经过不知难。——陆游 48、书籍把我们引入最美好的社会,使我们认识各个时代的伟大智者。——史美尔斯 49、熟读唐诗三百首,不会作诗也会吟。——孙洙 50、谁和我一样用功,谁就会和我一样成功。——莫扎特
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.3 8086 CPU指令系统
例:测试为0或1
若要检测AL中的最低位是否为1,若为1则转移。 test al,01h ;测试AL的最低位D0 jnz NO ;标志ZF=0,即D0=1 ;则程序转移到NO ... ;否则ZF=1,即D0=0,顺序执行 NO: ...
思考:(1)以上检测的是最低位,若要检测AX的最高位 是否为1,若为1则转移,如何编程?
3.3 8086 CPU指令系统
3、逻辑异或指令XOR
XOR reg,imm/reg/mem ;reg←reg⊕imm/reg/mem XOR mem,imm/reg ;mem←mem⊕imm/reg
功能:对两个操作数执行按位逻辑异或运算,结果送到目的 操作数 说明: (1)只有相“异或”的两位不相同,结果才是1; (2) XOR指令对操作数的限制和对标志位的影响同AND指令 思考: (1)某一个操作数自己和自己相异或,结果是? 寄存器清0 (2)XOR指令主要用在什么场合? 求反某些位
3.3 8086 CPU指令系统
5、测试指令TEST
TEST reg,imm/reg/mem ;reg←reg∧imm/reg/mem TEST mem,imm/reg ;mem←mem∧imm/reg
功能:对两个操作数执行逻辑与运算,结果不回送到目的操 作数,但要影响标志位,标志位影响同AND指令。 说明: (1)本条指令通常是用于检测一些条件是否满足,但又不 希望改变原有的操作数的情况下。 (2)本条指令通常在其后紧跟一条条件转移指令。
3.3 8086 CPU指令系统
一、逻辑运算指令
AND
OR
NOT
XOR
TEST
3.3 8086 CPU指令系统
1、逻辑与指令AND
AND reg,imm/reg/mem ;reg←reg∧imm/reg/mem AND mem,imm/reg ;mem←mem∧imm/reg
功能:对两个操作数执行按位的逻辑与运算,结果送到目的操 作数 说明:(1)按位的逻辑与运算; (2)操作数不能同时为存储器操作数; (3)注意对标志位的影响; 思考: (1)某一个操作数自和自己相逻辑与,结果是? (2)AND指令主要用在什么场合? 屏蔽某些位
3.3 8086 CPU指令系统
2、逻辑或指令OR
OR reg,imm/reg/mem ;reg←reg∨imm/reg/mem OR mem,imm/reg ;mem←mem∨imm/reg
功能:对两个操作数执行按位逻辑或运算,结果送到目的操 作数 说明:(1)按位逻辑或运算; (2)OR指令对操作数的限制和对标志位的影响; 思考: (1)某一个操作数自己和自己相逻辑或,结果是? (2)OR指令主要用在什么场合? 置某些位
3.3 8086 CPU指令系统
4、指令系统分类 指令系统是CPU指令的集合,Intel 8086指令系统共有117条基 本指令,按功能分为六大类:
(1)数据传送类; (2)算术运算类; (3)逻辑运算和移位(位操作类); (4)串操作; (5)控制转移类; (6)处理器控制。
3.3 8086 CPU指令系统
3.3 8086 CPU指令系统
4、逻辑非指令NOT
NOT reg/mem ;reg/mem←~reg/mem
功能:对一个操作数执行按位逻辑非运算 说明: (1)按位取反,原来是“0”的位变为“1”,原来是“1” 的位变为“0” ; (2)NOT指令是一个单操作数指令; (3)NOT指令不影响标志位;
3.3 8086 CPU指令系统
小结逻辑指令: 主要应用:对一个操作数的某些位进行置位(变为1) 或复位(变为0 )。源操作数往往是立即数。 实际编程时,需要正确地选取立即数。 例题:逻辑运算 mov al,45h and al,31h mov al,45h or al,31h mov al,45h xor al,31h mov al,45h not al ;逻辑与 al=01h ;CF=OF=0,SF=0、ZF=0、PF=0 ;逻辑或 al=75h ;CF=OF=0,SF=0、ZF=0、PF=0 ;逻辑异或 al=74h ;CF=OF=0,SF=0、ZF=0、PF=1 ;逻辑非 al=0bah ;标志不变
逻辑运算和移位(位操作)
位操作类指令以二进制位为基本单位进行数据的操作;包含逻 辑运算类指令和移位指令。是一类常用的指令,应该特别掌握 注意这些指令对标志位的影响
要求:全面而准确地理解每条指令的功能和应用 一、逻辑运算指令 AND/OR/XOR/NOT/TEST 二、移位指令 SHL/SHR/SAL/SAR 三、循环移位指令 ROL/ROR/RCL/RCR
3.3 8086 CPU指令系统
说明: 对于操作数:(1)第一个操作数是指定的被移位的操作数, 可以是寄存器或存储器操作数;第二个操作数表示移位位数, 该操作数为1,表示移动一位;当移位位数大于1时,则用CL 寄存器值表示。 对于标志位:按照移入的位设置进位标志CF;根据移位后 的结果影响SF、ZF、PF;对AF没有定义。对于OF,如果进 行一位移动,则按照操作数的最高符号位是否改变,相应设 置:如果移位前的操作数最高位与移位后操作数的最高位不 同(有变化),则OF = 1;否则OF = 0。当移位次数大于1时, OF不确定。
3.3 8086 CPU指令系统
例题:逻辑指令应用
;AND指令可用于复位某些位(同0相与),不影响其 他位:将BL中D3和D0位清0,其他位不变 and bl,11110110B
;OR指令可用于置位某些位(同1相或),不影响其他 位:将BL中D3和D0位置1,其他位不变 or bl, 00001001B ;XOR指令可用于求反某些位(同1相异或),不影响 其他位:将BL中D3和D0位求反,其他不变 xor bl, 00001001B
3.3 8086 CPU指令系统
二、移位指令
SHL
SHR
SAL
SAR
其中两条左移指令对应同一条机器指令,所以,从机器指 令的角度来说,移位指令只有三条。 四条指令分成逻辑移位和算术移位,分别具有左移或右移 操作,将操作数移动1位或多位。
3.3 8086 CPU指令系统
格式: 演示 SHL reg/mem,1/CL ;逻辑左移,最高位进入CF,最低位补0 演示 SAL与SHL相同 SHR reg/mem,1/CL ;逻辑右移,最低位进入CF,最高位补0 SAL reg/mem,1/CL ;算术左移,最高位进入CF,最低位补 0 演示 SAR reg/mem,1/CL ;算术右移,最低位进入CF,但符号位保持不变