第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。
- 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,但符号位保持不变