逻辑运算和移位指令

合集下载

单片机原理及应用第6讲逻辑运算指令及移位、转移指令

单片机原理及应用第6讲逻辑运算指令及移位、转移指令
只有它影响psw其余四个指影响incrnincdirectincriincdptr会影响psw寄存器中的标志位decrndecdirectdecri只有第一条指令影响psw十进制调整指令da影响psw中的标志位乘法指令mulab影响psw中的标志位ov1则结果超过了255除法指令divab影响psw中的标志位ov1则除数为零除法无意义31h单元编出一完整程序把两个数乘积的低位放入32h单元高放入33h单元org0100hmovr030hmovar0incr0movbr0mulabincr0movr0aincr0movr0bend逻辑运算指令anldirectanldirectorldirectorldirectxrldirectxrldirectdata内部数据存储单元30h有一个数试编程保留其低的低四位送入p1低四位p1口高四位不变外部ram30h中有一个数试编程把它的低四位取反内部ram30h中有一负数的补码循环移位指令rla7a0a7a0a7a0cycya7a0后两条指令影响标志位cy
• (2)带进位加法指令 • ADDC A,Rn • ADDC A, #data • ADDC A, direct • ADDC A, @Ri • 注意:影响PSW寄存器中的Cy 、AC、 OV、P标志位
• (3)加1指令 • INC A;只有它影响PSW,其余四个指 令不 影响 INC Rn INC direct INC @Ri INC DPTR
• • • •
4、累加器清零和取反指令 CLR A CPL A 用于对某个存储单元或累加器A中的数进 行清零和取反
• 例: • 1、内部数据存储单元30H有一个数,试 编程保留其低4位,高4位变为0 • 2、试编程把累加器A的低四位送入P1口 低四位, P1口高四位不变 • 3、外部RAM30H中有一个数,试编程把 它的低四位取反 • 4、内部RAM 30H中有一负数x,试编程 求x的补码

逻辑运算包括与或否异或除了否指令NOT外均有

逻辑运算包括与或否异或除了否指令NOT外均有
对标志位的影响: 若移位后符号位发生了变化,则OF = 1,否则OF = 0;CF为最后移入位;不影响
ZF与SF。然而,若移位次数为0,则不影响标志位;若移位次数 > 1,则OF无定义。
9

ห้องสมุดไป่ตู้
【例】
将DX:AX中的32位数 左移1位。
shl
ax, 1 ;逻
辑移位
rcl
dx, 1 ;带
进位移位
10
3.逻辑指令运用技术:
; dest左移。其中,count为移
位次数(下同)
SAL dest, count
; 同SHL
SHR dest, count
; dest逻辑右移
SAR dest, count
; dest算术右移
4
语法格式: SHL reg/mem, 1/CL SHL reg/mem, imm8 ; 286新增 SAL、SHR与SAR格式同SHL
操作但不存储结果
语法格式:
AND reg/mem, reg/mem/imm
OR
reg/mem, reg/mem/imm
XOR reg/mem, reg/mem/imm
NOT reg/mem
TEST reg/mem, reg/mem/imm
对标志位的影响: NOT:无。
其它指令:CF = OF = 0,按一般规则影响SF和ZF。
RCL dest, count
; dest带CF循环左移
RCR dest, count
; dest带CF循环右移
8
语法格式: ROL reg/mem, 1/CL ROL reg/mem, imm8 ; 286新增 ROR、RCL、RCR格式同ROL

8086算术、逻辑运算及移位指令

8086算术、逻辑运算及移位指令

8086算术、逻辑运算及移位指令8086是一种基于x86架构的微处理器,具有广泛应用的能力。

它支持多种算术、逻辑运算和移位指令,这些指令为编程人员提供了强大的工具来处理数据和操纵位级操作。

算术指令是8086中非常重要的一部分。

它们允许我们对数据执行各种加减乘除运算。

例如,ADD指令用于对两个数进行加法运算,这通常用于求和操作。

而SUB指令则用于执行减法运算,可用于计算差值。

MUL和DIV指令则用于执行乘法和除法操作,它们对于处理需要大量数值计算的应用程序非常有用。

逻辑运算指令也是8086中的重要组成部分。

它们用于执行与、或、非和异或等逻辑运算。

AND指令用于执行位级与运算,可以对数据的每个位进行逻辑与操作。

OR指令执行逻辑或运算,可以通过将各个位进行逻辑或操作来组合数据。

NOT指令用于执行位级非运算,将数据的每个位取反。

XOR指令执行异或运算,可以对数据的位进行逻辑异或操作。

这些逻辑运算指令非常灵活,可用于编写各种数据处理和逻辑判断的算法。

移位指令允许我们在数据的二进制位级上进行操作。

8086提供了逻辑左移、逻辑右移、算术左移和算术右移指令。

逻辑左移指令将数据在二进制位级上向左移动,相当于乘以2。

逻辑右移指令将数据在二进制位级上向右移动,相当于除以2。

算术左移和算术右移指令与逻辑移位指令类似,但在进行移位时保留了最高位的符号位,以保持有符号整数的正负性。

这些运算和移位指令在编程中起着至关重要的作用。

通过巧妙地组合使用这些指令,我们可以实现各种复杂的计算和逻辑操作。

例如,我们可以使用算术和移位指令来实现高效的乘法和除法算法,减少计算时间和资源消耗。

我们还可以使用逻辑指令来处理数据的位级运算,例如检查某一位是否为1、设置某一位为1或将某一位清零。

为了更好地理解这些指令的功能和用法,编程人员需要深入学习和实践。

通过掌握8086的算术、逻辑和移位指令,我们可以编写更高效和功能强大的程序,提高计算机应用的性能和效率。

逻辑运算类指令

逻辑运算类指令

标志位
解释
P OAC VCY
√ × × × 累加器A中的内容和直接地址单元中的内容执 行逻辑或操作。结果存在累加器A中
√ × × × 累加器A的内容和立即数执行逻辑或操作。结 果存在累加器A中
√ × × × 累加器A的内容和寄存器Rn的内容执行逻辑或 操作。结果存在累加器A中
√ × × × 累加器A的内容和工作寄存器Ri指向的地址单 元中的内容执行逻辑或操作。结果存在累加器 A中
单片机原理与应用
逻辑运算类指令
逻辑运算指令共有24条 有与、或、异或、求反、左右移位、清0等逻辑操作 有直接、寄存器和寄存器间址等寻址方式。
1. 清零指令(1条)
指令
功能
标志位 解释
P OA C VC Y
CLR A
A ←0
√ × × × 累加器A中的内容清0
2.求反指令(1条)
指令功能Βιβλιοθήκη 标志位√ × × × 累加器A的内容和工作寄存器Ri指向的地址单元中 的内容执行逻辑异或操作。结果存在累加器A中
√ × × × 累加器A的内容和立即数执行逻辑异或操作。结果 存在累加器A中
√ × × × 累加器A的内容和寄存器Rn中的内容执行逻辑异 或操作。结果存在累加器A中
× × × × 直接地址单元中的内容和累加器A的内容执行逻辑 异或操作。结果存在直接地址单元中
XRL A,Z
CPL A
ORL A,R1 MOV F,A SJMP $
;A ← (X) ;A ← (A)∧(Y) ;A内容暂存 ;A ← (Y)
;A ← (Y) (Z)
; A ←()()
;得到输出 ;存输出
单片机原理与应用
× × × × 直接地址单元中的内容和累加器A的内容执行 逻辑或操作。结果存在直接地址单元中

实验二 算术逻辑运算及移位操作

实验二  算术逻辑运算及移位操作

实验二算术逻辑运算及移位操作一.实验任务1.实验程序段及结果表格如表:分析:程序段1:MOV AX, 1018H ;AX←1018HMOV SI, 230AH ;SI←230AHADD AX, SI ;AX=3322H,低8位为00100010B,1的个数;为偶数,PF=1,同时D3向D4有进位发生,AF=1 ADD AL, 30H ;AX=3352H,低8位1个个数为奇数,PF=0 MOV DX, 3FFH ;DX←3FFHADD AX,BX ;AX=3352H,MOV [20H], 1000H ;[20H]←1000HADD [20H], AX ;[20H]=4352HPUSH AX ;POP BX ;BX=3352H程序段2:MOV AX, 0A0AH ;AX←0A0AHADD AX, 0FFFFH ;AX=0A09H,最高位进位CF=1,低8位1的;个数为偶数PF=1;D3向D4进位AF=1 MOV CX, 0FF00H ;CX←0FF00HADC AX, CX ;AX=090AH,最高位进位CF=1,低8位1的个;数为偶数PF=1SUB AX, AX ;AX=0,运算结果为零ZF=1INC AX ;AX=1HOR CX, 0FFH ;CX=0FFFFH,最高位为1,ZF=1,低8位1的;个数为偶数PF=1AND CX, 0F0FH ;CX=0F0FH,低8位1的个数为偶数PF=1MOV [10H], CX ;[10H]←0F0FH程序段3:MOV BL, 25H ;BL←25HMOV BYTE PTR[10H], 4 ;[10H]←04HMOV AL, [10H] ;AL←04HMUL BL ;AL=94H程序段4:MOV WORD PTR[10H],80H ;[10H]←0080HMOV BL, 4 ;BL←04HMOV AX, [10H] ;AX←0080HDIV BL ;AX=0020H程序段5:MOV AX, 0 ;AX←0000HDEC AX ;AX=0FFFFH,最高位为1,SF=1,低8;位1的个数为偶数PF=1,最高位向前、;D3向D4有借位,CF=1,AF=1 ADD AX, 3FFFH ;AX=3FFEH,D3向D4有进位,AF=1 ADD AX, AX ;AX=7FFCH,低8位1的个数为偶数,PF=1;D3向D4有进位,AF=1NOT AX ;AX=8003HSUB AX, 3 ;AX=8000H,低8位1的个数为偶数,PF=1;最高位为1,SF=1OR AX, 0FBFDH ;AX=0FBFDH,最高位为1,SF=1AND AX, 0AFCFH ;AX=0ABCDH,最高位为1,SF=1SHL AX,1 ;AX=579AH,低8位1的个数为偶数,PF=1,;算数结果溢出OF=1,最高位进位CF=1 RCL AX,1 ;AX=0AF35H,低8位1的个数为偶数,;PF=1,算数结果溢出OF=12.用BX寄存器作为地址指针,从BX所指的内存单元(0010H)开始连续存入三个无符号数(10H、04H、30H),接着计算内存单元中的这三个数之和,和放在0013H单元中,再求出这三个数之积,积放0014单元中。

汇编语言2-4逻辑移位指令

汇编语言2-4逻辑移位指令
第 2章
8086指令系统
一、数据传送类; 二、算术运算类; 三、位操作指令(逻辑运算和移位类); 四、串操作类; 五、控制转移类; 六、处理器控制类;
第 2章
8086指令系统
位操作指令,它们都是按位进行操作的包含逻辑运
算类指令和移位指令。 位操作类指令以二进制位为基本单位进行数据的操 作;这是一类常用的指令,都应该特别掌握 注意这些指令对标志位的影响 要求:全面而准确地理解每条指令的功能和应用 重点掌握以下指令:
第 2章
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指令主要用在什么场合?
RCR reg/mem,1/CL
;带进位循环左移
;带进位循环右移
演示
第 2章
说明:循环移位指令
对操作数:同移位指令。 对标志的影响:
(1)按照指令功能设置进位标志CF (2)不影响SF、ZF、PF、AF (3)对于OF,同移位指令。如果进行一位移动, 则按照操作数的最高符号位是否改变,相应设置 溢出标志OF:如果移位前的操作数最高位与移位 后操作数的最高位不同(有变化),则OF = 1; 否则OF = 0。当移位次数大于1时,OF不确定
第 2章
例:移位指令
mov cl,4 mov al,0f0h ;al=f0h shl al,1 ;al=e0h ;CF=1,SF=1、ZF=0、PF=0,OF=0 shr al,1 ;al=70h ;CF=0,SF=0、ZF=0、PF=0、OF=1 sar al,1 ;al=38h ;CF=0,SF=0、ZF=0、PF=0、OF=0 sar al,cl ;al=03h ;CF=1,SF=0、ZF=0、PF=1 、OF=0

指令的种类

指令的种类
PUSH OPRD ;进栈指令 POP OPRD ;出栈指令
3.堆栈操作指令
4.输入/输出指令
★统一编址 当内存与接口地址统一编址时,内存与接口同属于一个 地址空间,用于内存的指令原则上均可用于接口。 ★独立编址 当内存与接口地址采用独立编址时,它们的地址是相互 独立的。
指令的种类
1.2 算术运算类指令
格式
MOVS/MOVSB/MOVSW
串 操
CMPS/CMPSB/CMPSW

SCAS/SCASB/SCASW


LODS/LODSB/LODSW
STOS/STOSB/STOSW
名称 串传送指令 串比较指令 串扫描或串搜索指令 串装入指令 字串存储指令
指令的种类
1.8 位操作指令
位操作指令是对某一位进行操作的指令,也就是对一个字 (字节)中的某一位进行操作的指令。
格式
操作

HLT
使处理器处于停止状态, 不执行指令

位 WAIT 使处理器处于等待状态
操 作 指
LOCK
封锁总线指令,可放在 任一指令前作为前缀

NOP
空操作指令,处理器什 么操作也不做
指令的种类
1.7 串操作指令
在存储器中存放的一串字或字节可以是二进制数,也可以是 BCD码或ASCⅡ码。它们存放在某一个连续的内存区中,若对它 们的每字或字节均进行同样的操作,该操作就称串操作。
XOR指令对两个操作数进 行按位异或运算。
指令的种类
1.4 移位、循环类指令
CF
位移指令SAL/SHL操作示意图
CF
SAR操作示意图
CF 0
SHR操作示意图
指令的种类

微机原理4[1].4逻辑运算及串操作指令

微机原理4[1].4逻辑运算及串操作指令
?源数据串段值为ds偏移地址为si?目的数据串段值为es偏移地址为di?字符串长度字数或字节数使用cx?指令cld使标志df0递增方向指令std使标志df1递减方向?每执行一次串指令自动修改sidi值si1或2di1或2ds
三、位操作指令
可对8位或16位的寄存器或存储器单元中 的内容按位进行操作,包括:
例1:将2000H:1200H地址开始的100个字节 传送到6000H:0000H开始的内存单元中。
MOV AX,2000H MOV DS,AX KKK:MOV AL,[SI] 2000H:1200H MOV [DI],AL MOV AX,6000H 如果不用串操作指令 INC SI MOV ES,AX INC DI MOV SI,1200H DEC CX JNZ KKK MOV DI,0 此处不用 6000H:0000H REP,则: MOV CX,100 KKK: MOVSB CLD DEC CX NEXT:REP MOVSB
(4)测试指令TEST 指令格式: TEST dest,src;dest ∧ src 指令功能: 源操作数和目的操作数的内容执行按位 的逻辑与运算,根据结果置SF、PF、ZF, 且CF=OF=0,而AF位无定义。 dest,src内 容不变。
常用于:
在不改变原来操作数的情况下,检测某一位 或某几位是否为1或为0。 编程时,用在条件转移指令前产生条件。

实现对一串字符或数据的操作
可进行串传送、串比较、串扫描、读串或写 串等操作,串长最多可达64KB

字符串指令的寻址方式只用隐含寻址,源串 固定使用SI,目的串固定使用DI。

指令包含:
REP REPE/REPZ REPNE/REPNZ
MOVS、STOS、LODS CMPS、SCAS

单片机3.3逻辑运算指令

单片机3.3逻辑运算指令
15
注: ●位逻辑指令是某一位地址或C的内容进行逻辑操作,参 与运算的只是一位数。 ●片内RAM可位寻址字节地址是20H—2FH,位地址范围 是00H-7FH, 共128位,注意区分字节地址和位地址。 ●特殊功能寄存器SFR中可位寻址的位亦可参与位逻辑运 算,这些位所在的字节地址必能被8整除,其余不可位寻 址的位不可参与位逻辑运算。
★非运算:求反
符号 A
Z
记作 Z = A
2
一、 对A累加器进行的逻辑操作:
1. CPL A
;A求反
2. CLR A ;A清0
3.移位指令:
(1). RR A
7
0
(2).RRC A
C7
0
3
(3).RL A
7
0
(4).RLC A
C7
0
移位指令助记符意义: 第一个字母R 表示移位操作。 第二个字母 表示移位方向,L 向左;R 向右。 第三个字母 表示是否通过C。
16
位逻辑指令举例 MOV 24H, #02H MOV 2EH, #05H MOV C, 21H ANL C, 72H CLR C ORL C, 24H ANL C, 71H SETB C CPL C ORL C, 21H CLR 72H
;(24H) = 02H,(21H位)=1 (2EH)=05H,72H位70H位=1 ;( C )=1 ;( C) =1 ;( C) =0 ;(24H位)求反为1,( C )=1 ;(71H位)=0,与结果( C )=0 ;( C )=1 ;( C )=0 ;(21H位)=1,或结果( C )=1 ;(72H位)=0,(2EH)=01H
为C表示连同C共9位数一起移位 无第三字母表示与C无关。 4.SWAP A ;A的内容高低半字节相交换

汇编语言2(沈美明)

汇编语言2(沈美明)
22只能对寄存器存储器操作33最多移位255次44可用于无符号数的乘22除22操作cf0cf03334移位指令之salsar功能
3.3.3、逻辑运算和移位指令 逻辑运算和移位指令
用途:用于8/16位数据的逻辑操作。 用途:用于8/16位数据的逻辑操作。 8/16位数据的逻辑操作 分类:逻辑运算指令: 分类:逻辑运算指令: 逻辑移位指令: 逻辑移位指令: AND、OR、NOT、XOR、 AND、OR、NOT、XOR、TEST SHL、SAL、SHR、SAR、ROL、 SHL、SAL、SHR、SAR、ROL、 ROR、RCL、 ROR、RCL、RCR
CF
注意: 注意: 1、目标操作数可以是字、字节。 目标操作数可以是字、字节。 CF 2、只能对寄存器、存储器操作 只能对寄存器、 3、最多移位255次 最多移位255次 255
3.3.3.4 、移位指令之 移位指令之RCL/RCR
功能:循环左/右移位 功能:循环左/ 格式: RCL/RCR 格式: 操作: 操作: CF 注意: 注意: 1、目标操作数可以是字、字节。 目标操作数可以是字、字节。 CF 2、只能对寄存器、存储器操作 只能对寄存器、 3、最多移位255次 最多移位255次 255 REG/MEM, 1/CL
SAL/SAR例 例
例:SAL AX,1 SAR BL,1 MOV CL,06H SAR WORD PTR[BX+SI],CL 有符号数的乘法: 有符号数的乘法: CBW SAL AX,4
3.3.3.4 、移位指令之 移位指令之ROL/ROR
功能:循环左/右移位 功能:循环左/ 格式: ROL/ROR 格式: 操作: 操作: REG/MEM, 1/CL
3.3.3.1 、逻辑运算之 逻辑运算之TEST

逻辑运算转移

逻辑运算转移

禁止键盘中断: IN AL,21H OR AL,0000 0010B OUT 21H,AL
;使D1为1
9

379H端口的D7存放打印机的状态
7 6 5 4 3 2 1 0 1 0 1 0 0 0 1 0 D7 D6 D5 D4 D3 D2 D1 D0 为0, 表示打印机忙 为1, 打印机空闲
用查询方式控制打印机工作: MOV DX, 379H ask: IN AL, DX TEST AL, 1000 0000B JZ ask print: 、、、
A A
0 1 1 0
例: 1011 1010 0100 0101
`异或`运算:异则1,同则0
A 0 0 1 1 B 0 1 0 1 A∨ B 0 1 1 0
例:
1010 1100 1001 0101
∨ 0011 1001
4
1. 逻辑运算指令
指令格式 AND dst,src OR dst,src
执行操作 (dst) ← (dst)∧(src) (dst) ← (dst)∨(src) (oprd)← (oprd) (dst) ← (dst)∨(src) (oprd1)∧(oprd2)
第一条指令在内存的ROM区。 … … … … … … …
22
FFFF:0000h
2、非控制转移指令,指令本身对CS和IP均无操作, 形成顺序执行结构。 顺序执行结构: 顺序存放,顺序执行 程序是指令的集合 CS:IP 指令1 指令在内存中顺序存放 对非控制转移指令, 指令2 CPU取来一条指令后, 自动将IP的值加上该指令的字节数, 指令3 使IP顺序指向下一条指令, CPU取来紧连着的指令执行。 (此时IP的变化由CPU内部的硬件自动完成)

位逻辑指令逻辑运算结果用英文简写

位逻辑指令逻辑运算结果用英文简写

位逻辑指令逻辑运算结果用英文简写位逻辑指令是计算机中常用的一种指令类型,用于对二进制位进行逻辑运算。

在计算机科学中,位逻辑指令的逻辑运算结果通常使用英文简写来表示。

本文将介绍几种常见的位逻辑指令及其逻辑运算结果的英文简写。

首先,我们来介绍与运算(AND)指令。

与运算是指对两个二进制位进行逻辑与操作,只有当两个位都为1时,结果才为1,否则为0。

与运算的英文简写是AND。

例如,对于两个二进制位A和B,它们的与运算结果可以表示为A AND B。

接下来,我们来介绍或运算(OR)指令。

或运算是指对两个二进制位进行逻辑或操作,只要两个位中有一个为1,结果就为1,否则为0。

或运算的英文简写是OR。

例如,对于两个二进制位A和B,它们的或运算结果可以表示为A OR B。

除了与运算和或运算,还有异或运算(XOR)指令。

异或运算是指对两个二进制位进行逻辑异或操作,当两个位不相同时,结果为1,否则为0。

异或运算的英文简写是XOR。

例如,对于两个二进制位A和B,它们的异或运算结果可以表示为A XOR B。

另外,还有取反运算(NOT)指令。

取反运算是指对一个二进制位进行逻辑取反操作,将1变为0,将0变为1。

取反运算的英文简写是NOT。

例如,对于一个二进制位A,它的取反运算结果可以表示为NOT A。

最后,我们来介绍移位运算(Shift)指令。

移位运算是指将一个二进制数的所有位向左或向右移动一定的位数。

移位运算的英文简写是Shift。

例如,对于一个二进制数A,它的向左移位运算结果可以表示为A << n,其中n表示要移动的位数;它的向右移位运算结果可以表示为A >> n。

综上所述,位逻辑指令的逻辑运算结果可以用英文简写来表示。

与运算的英文简写是AND,或运算的英文简写是OR,异或运算的英文简写是XOR,取反运算的英文简写是NOT,移位运算的英文简写是Shift。

这些英文简写在计算机科学中被广泛使用,方便了人们对位逻辑指令的理解和应用。

汇编语言4

汇编语言4
0
高位
dest
低位
CF
图3-4 逻辑右移操作示意图
例3-35:分析以下程序段。
• MOV BX ,24H ;(BX)= 36 = 00100100B • MOV CL ,2 • SHR BX ,CL ;将BX内容右移2位, (BX)= 00001001B,CF=0 • 执行程序段以后,(BX)= 09H = 9,相当于除以2的2 次方。 • 由此可见,逻辑右移指令可以方便地实现操作数除运算 (n为移位次数)。不过在使用中要注意操作数应该为无 符号数,否则会得出错误结果。
例3-27:
MOV AL ,56H ;(AL)= 01010110B
NOT AL ;(AL)= 10101001B = 0A9H • 说明:NOT指令是单操作数指令,该操作数可以是立即数以 外的任何寻址方式。NOT指令不影响标志位。
2.逻辑与指令AND
• 指令格式:AND dest , src • 功能:将目的操作数和源操作数按位“与”,结果存入目的地 址中。即dest (dest)∧(src) 。 • “与”运算的规则为:1∧1=1,1∧0=0,0∧1=0,0∧0=0。 • 该指令可以屏蔽操作数中的某些位,使其余位保持不变。要屏 蔽的位与0相“与”,不变的位与1相“与”的左移和右移能够实现对数据乘以2的 整数次幂和除以2的整数次幂。 • MOV AL,64H • MOV CL,2 • SHL AL,CL;实现对64H左移2位,得到结果 AL=90H • 左移,可能出现溢出,造成错误。
算术移位的左移和右移实现乘除
• 算术移位的左移和右移能够实现对数据乘以2的 整数次幂和除以2的整数次幂。 • MOV AL,64H • MOV CL,2 • SHL AL,CL;实现对64H左移2位,得到结果 AL=90H • 左移,可能出现溢出,造成错误。

逻辑运算和移位指令

逻辑运算和移位指令

……
;否则(正数)不转移
MINUS: … …
……
8
2.移位指令
(1)非循环移位指令
算术左移指令 SAL(Shift Arithmetic Left)
算术右移指令 SAR(Shift Arithmetic Right) 逻辑左移指令 SHL(Shift Left)
逻辑右移指令 SHR(Shift Right) 这4条指令的格式相同,以SAL为例:
12
(2)循环移位指令
不含进位位的循环左移指令 ROL 不含进位位的循环右移指令 ROR 含进位位的循环左移指令 RCL 含进位位的循环右移指令 RCR
➢格式同非循环移位指令。 ➢移位位数放在CL寄存器中,如果只移1位, 也可以直接写在指令中。 ➢循环移位指令只影响标志位CF和OF。
13
这4条指令的功能如下图示:
MOV CL,4 SHR AL,CL ;AL中的内容右移4位 ➢影响C,P,S,Z,O标志。 ➢结果未溢出时: 左移1位≡操作数*2 右移1位≡操作数/2
11
例:把AL中的数x乘10 因为10=8+2=23+21,所以可用移位实现乘10 操作。程序如下:
SAL AL,1 ; 2x MOV AH,AL SAL AL,1 ; 4x SAL AL,1 ; 8x ADD AL,AH ; 8x+2x = 10x
……
; if not matall ‘1’
3
(2) 逻辑”或” OR
对两个操作数进行按位逻辑”或”操作。 格式:OR dest, src 用途:对操作数的某几位置1;对两操作数
进行组合。
例1:把AL中的非压缩BCD码变成相应十进制 数的ASCII码。 OR AL, 30H

微机实验二算术逻辑运算及移位操作

微机实验二算术逻辑运算及移位操作

实验二算术逻辑运算及移位操作一、实验目的1.熟悉算术逻辑运算指令和移位指令的功能。

2.了解标志寄存器各标志位的意义和指令执行对它的影响。

二、实验要求1.复习8086指令系统中的算术逻辑类指令和移位指令。

2.按照题目要求在实验前编写好实验中的程序段。

三、实验内容与步骤1. 实验程序段及结果表格如下2.用BX寄存器作为地址指针,从BX所指的内存单元(0010H)开始连续存入三个无符号数(10H、04H、30H),接着计算内存单元中的这三个数之和,和放在0013H单元中,再求出这三个数之积,积放0014单元中。

写出完成此功能的程序段并上机验证结果。

MOV BX,0010HMOV [BX],10HMOV [0001H][BX],04HMOV [0002H][BX],30HMOV AL,[BX]ADD AL,[0001H][BX]ADD AL,[0002H][BX]MOV [0003H][BX],ALMOV AL,BLMUL [0001H][BX]MUL [0002H][BX]MOV [0004H][BX],AX3.写出完成下述功能的程序段。

上机验证你写出的程序段,程序运行的最后结果(AX)=0372(1) 传送15H到AL寄存器; MOV AL,15H(2) 再将AL的内容乘以2;(3) 接着传送15H到BL寄存器; MOV BL,15H(4) 最后把AL的内容乘以BL的内容。

MUL BL(AX)=03724.写出完成下述功能的程序段。

上机验证你写出的程序段,程序运行后的商=73(1) 传送数据2058H到DS:1000H单元中,数据12H到DS:1002H单元中;(2) 把DS:1000H单元中的数据传送到AX寄存器;(3) 把AX寄存器的内容算术右移二位;(4) 再把AX寄存器的内容除以DS:1002H字节单元中的数;(5) 最后把商存入字节单元DS:1003H中。

MOV [1000H],2058HMOV [1002H],12HMOV AX,[1000H]MOV CL,2SAR AX,CLDIV [1002H]MOV [1003H],ALRET四、实验心得与体会在上节课实验的基础上,这次的实验比较顺利,感觉到了微机实验的魅力,对实验产生了浓厚的兴趣。

计算机指令3篇

计算机指令3篇

计算机指令计算机指令是计算机内部进行操作的命令,它描述了计算机需要进行的具体操作。

计算机指令可以分为数据传输指令、算术运算指令、逻辑运算指令、移位指令和控制指令等类型。

本文将对这些指令进行详细介绍。

数据传输指令数据传输指令可以将数据从一个地方传输到另一个地方。

其中,传输的源和目的地可以是内存、CPU寄存器或者I/O端口等。

常见的数据传输指令有MOV、PUSH和POP等。

MOV指令可以将数据从一个位置复制到另一个位置。

例如,MOV AX, BX表示将BX的值复制到AX中。

PUSH指令可以将数据压入栈中,POP指令可以将栈中的数据弹出。

这在函数调用和返回时非常有用。

例如,PUSH AX表示将AX的值压入栈中。

算术运算指令算术运算指令可以对数据进行加、减、乘、除等运算。

常用的算术运算指令包括ADD、SUB、MUL和DIV等。

ADD指令可以将两个数相加并将结果存储在目的地。

例如,ADD AX, BX表示将AX和BX相加,并将结果存储在AX中。

SUB指令可以将两个数相减并将结果存储在目的地。

例如,SUB AX, BX表示将BX从AX中减去,并将结果存储在AX中。

MUL指令可以将两个数相乘并将结果存储在目的地。

例如,MUL AX, BX表示将AX和BX相乘,并将结果存储在AX中。

DIV指令可以将两个数相除并将商存储在目的地。

例如,DIV AX, BX表示将AX除以BX,并将商存储在AX中,余数存储在DX中。

逻辑运算指令逻辑运算指令可以对数据进行与、或、非、异或等运算。

常用的逻辑运算指令包括AND、OR、NOT和XOR等。

AND指令可以对两个数进行与运算,并将结果存储在目的地。

例如,AND AX, BX表示将AX和BX进行与运算,并将结果存储在AX中。

OR指令可以对两个数进行或运算,并将结果存储在目的地。

例如,OR AX, BX表示将AX和BX进行或运算,并将结果存储在AX中。

NOT指令可以对一个数进行取反操作,并将结果存储在目的地。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

奇数处理
… 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 ;寄存器 ∧ 立即数 ; 寄存器 ∧ 寄存器 ; 寄存器 ∧ 存储器 ; 存储器 ∧ 寄存器
XOR AL,0AAH
10
例 2:
比较三条(AX)清“0‖指令: XOR AX , AX SUB AX, AX MOV AX , 0 ; 清AX , 清CF,2个字节,3个T。 ;清AX , 清CF,2个字节,3个T。 ;清AX ,不影响标志位, 3个字节,4个T。
XOR清“0‖指令在多字节累加程序中十分有用。 例 3: 将存放在TABLE开始的100个字节的16进制数进行累加, 和存于SUM+1、SUM单元。
; 寄存器 立即数 ;寄存器 寄存器 ; 寄存器 存储器 ;存储器 寄存器 ; 存储器 立即数
9
注意: • “异或”指令中操作数不能同时为存储器; 用途:对某些特定位求反,某些特定位与“1‖
其余位保持不变,保持不变与“0‖ 。
应用举例: 例1: 将(AL)中的第1、3、5、7位求反 0、2、4、6位保持不变。 MOV AL, 0FH
15
(二)移位指令 (8088有8条移位指令) : 1、 算逻移位指令( 4条 ): SHL , SHR, SAL , SAR 。
(1)、 SHL/SAL(Shift logical left/shift arithmetic left)
逻辑左移/算术左移指令
(2)、SHR (Shift logical right ) 逻辑右移指令
5、NOT(Logical not ) 逻辑“非”指令
特点:
• • • 8088可以对8位,或16位操作数执行逻辑操作。 逻辑运算是按位操作,操作数应该是位串而不是数。 影响条件码: (NOT指令除外,其他指令同)
根据结果设置SF、ZF和PF,CF=OF=0
1
1、AND(Logical and )逻辑“与”指令 格式:AND dest, src ;B/W,(dest)(dest ∧ (src) src: 立即数、寄存器、存储器。
格式: SHR dest ,cnt ;逻辑右移指令, B/W 执行操作:相当于无符号数的÷2功能。
SHR指令操作示意图如下图所示:
dest
0
CF
dest : 寄存器、存储器寻址方式。 指令格式举例: SHR BL , 1 SHR AX , CL SHR BYTE PTR [DI+BP],1 SHR WORD PTR BLOCK ,CL
Y
(AH)+1 (AH)
地址指针+1 循环次数-1
N
循环次数=0?
Y 结束
流 程 图
12
5、NOT(Logical not )逻辑“非”指令 格式: NOT dest ;B/W 指令操作数只有一个,指令对操作数按位求反。
执行操作:
字节求反:(dest)0FFH-(dest) 字求反: (dest 0FFFFH-(dest) 源操作数:寄存器、存储器。不能是立即数。 影响标志位:对标志位无影响。
× ×× × ×× 1 × 4. 测试某些位(测奇偶性): 见TEST指令的用途例子。 测试 “奇”“偶”性。
14
逻辑指令应用小结:
(1)AND指令用来对指令的指定位清“0‖。 (2)OR指令常用来对某些位置1。 (3)XOR指令用在程序开头,使某个寄存器清“0‖。 (4)NOT指令对某个数据取反,+1成补码。 (5)TEST指令用来检测指定位为1,还是0。

; 寄存器 ;寄存器 ; 寄存器 ;存储器 ;存储器
∧ ∧ ∧ ∧
操作类型举例: OR BL,0F6H OR AH, BL OR CL ,BETA[BX][DI] OR GAMMA[SI] ,DX OR BYTE PTR MEM_BYTE , 80H
立即数 寄存器 存储器 寄存器 立即数 7
注意: •
执行指令: AND AL,0FDH 即可。
2. 使某些位置“1‖。 IN AL,61H;(AL)=×××× ×××× 执行指令: OR AL,02 ↑想使此位为“1‖
3. 使某些位求反: IN AL,61H ;(AL)= ⊕ × × × × ××0 × 0 0 0 0 0 0 1 0
XOR AL,02H
(1)、 SHL/SAL(Shift logical left/shift arithmetic left) 逻辑左移/算术左移指令
格式: SHL dest ,cnt ;逻辑左移指令, B/W
SAL dest ,cnt ;算术左移指令, B/W
dest : 寄存器、存储器寻址方式。 cnt : 表示移位次数 cnt=1,1可写在指令中。 cnt>1,用CL存放移位次数 。
(3)、SAR (Shift arithmetic right )算术右移指令
2、循环移位( 4条): ROL, ROR , RCL, RCR。
(1)、ROL (Rotate left )
(2)、ROR (Rotate right )
不含CF循环左移指令
不含CF循环右移指令
(3)、RCL (Rotate left through carry )含CF循环左移指令
操作类型举例: NOT AH
NOT CX NOT BYTE PTR [BP]
; 8位寄存器求反
;16位寄存器求反 ;8位存储器求反
13
NOT WORD PTR COUNT ;16位存储器求反
综合举例:
1.使某些位置“0‖。
IN AL,61H;(AL)=×××× ×× × ×B ↑设备控制寄存器 ↑想使此位为0
例1:将英文小写字母ASCII转换成大写。 小写英文字母ASCII为:‘a‘~‘z‘ 61H~7AH 大写英文字母ASCII为:‘A‘~‘Z‘ 41H~5AH FDH 程序: MOV AL, ‘z‘ 1101 1111 AND AL,0DFH ;(AL)=5AH 例2:判断键盘按下的字符是不是‘Y‘? MOV AH, 7 INT 21H ;键入无回显,(AL)=输入键的字符码 AND AL, 0DFH CMP AL, ‗Y‘ JE YES … YES: … 4 …
11
开始
程序:
100个字节的16进制数 进行累加。
LEA BX , TABLE MOV CL,100 XOR AX ,AX LOOPER:ADD AL,[BX] JNC GOON INC AH GOON: INC BX DEC CL JNZ LOOPER MOV SUM , AX HLT
初始化,置数据块地址指针 置循环次数,清(AL)、(AH) 累加1个字节送(AL) N 有进位?
SAL AX,CL
• 利用移位指令编制程序,执行时间比直接用指令快, 速度可提高5-6倍。17来自•条件码设置:
算逻移位移位指令:
执行多次移位指令后对CF、OF的影响: CF=从目标操作数移出的最后一位;OF不定。 执行一次移位指令指令后对CF、OF的影响: OF用于判断移位后最高有效位是否发生变化. 最高位与CF不等, 则: OF = 1,
; 寄存器 ∧ 立即数 ;寄存器 ∧ 寄存器 ; 寄存器 ∧ 存储器 ;存储器 ∧ 寄存器 ;存储器 ∧ 立即数
5
用途: 常常用来检测一些条件是否满足,但又不希望改变原有 的操作数的情况下,常在此指令后边加一条 条件转移指令。 例:判断A单元中数据的奇偶性
设: (A )= 0AEH
程序:MOV AL,A TEST AL,01H JZ EVEN … ; 结果=0为偶数转EVEN ;(AL)=0AEH
(2) 使操作数中若干位保持不变,若干位与“1‖相与; 而若干位置为“0 ―的场合,若干位与“0‖ 相与。 例: 若(AL)=43H AND AL, 0FH ; (AL)=03H, (AL)0~3不变;
;(AL)4~7=00H,屏蔽高4位。
3
―与”指令应用举例:
61H 0110 0001
41H
0100 0001
2、 TEST(Test or non_destructive logical and )测试指令
格式: TEST dest , src;(dest)∧(src) src: 立即数、寄存器、存储器。 dest: 寄存器、存储器。 执行操作: 二个操作数相与的结果不存,置条件码。 操作类型举例: TEST BH, 7 TEST SI , BP TEST DI ,TABLE[BX] TEST [SI],CH TEST word ptr [BX][DI], 6ACEH
相关文档
最新文档