8086CPU指令系统--汇编语言逻辑运算和移位操作指令

article/2025/10/7 7:30:37

文章目录

  • 一、逻辑运算指令
      • 1、逻辑‘与’指令 AND
      • 2、逻辑‘或’指令 OR
      • 3、逻辑“非”指令 NOT
      • 4、逻辑“异或” XOR
      • 5、测试指令TEST
  • 二、移位指令
    • 1)非循环移位
      • 1、算数左移SAL和逻辑左移SHL
      • 2、逻辑右移SHR
      • 3、算术右移SAR
    • 2)循环移位
      • 1、带CF的循环左移 RCL
      • 2、带CF的循环右移 RCR
      • 3、不带CF的左移循环 ROL
      • 4、不带CF的右移循环 ROR
    • 助记

一、逻辑运算指令

在这里插入图片描述

1、逻辑‘与’指令 AND

指令格式:AND OPRD1,OPRD2 ;OPRD1←OPRD1^OPRD2
功能:AND指令使源操作数和目标操作数按bit位相“与”,结果送回目标操作数。AND中的“与”’特性通常可将指定位清0
常用作:

  1. 实现两个数 的按位与
  2. 使目标操作数中某些位保持不变,把其他位清‘0’
  3. 使操作数不变,但影响其他6个状态标志位,并使CF=OF=0
    例如:
AND AX,[BX]		;AX和[BX]所指字单元的内容按位相‘与’,结果送AX
AND AL,OFH		;AL的高四位清0,第四位保持不变
AND AX,AX		;AX自身按位相与,不改变AX中的内容,但影响6个状态标志位

2、逻辑‘或’指令 OR

指令格式:OR OPRD1,OPRD2 ;OPRD1←OPRD1∨OPRD2
指令功能:OR指令实现对源操作数和目标操作数按位相“或”,结果送会目标操作数中,对应AND指令,OR指令在程序中也应用于一下方面:

  1. 实现对两数按位相“或”
  2. 使目标数某些位保持不变,将另外一些位置1。此时源操作数应这样设置:目标数哪些位需要置‘1’,就把源操作数的对应bit位设为1,其他位设为0
  3. 使操作数不变,但影响6个状态标志位,并使CF=OF=1
    例如:
OR [BX],AL		;[BX]←[BX]∨AL,将[BX]中内容和AL中内容向“或”,结果送回[BX]单元
OR AL,20H		;将AL中的D5位置1,其余位不改变
OR AX,AX		;AX中内容不变,但影响6个状态标志位

3、逻辑“非”指令 NOT

指令格式:NOT OPRD
指令功能:NOT指令是单操作数指令,它将指定的操作数OPRD按位取反,再送回该操作数,这里可以是8位或16位的寄存器操作数,但不能是立即数。NOT指令对标志位无影响。
例如:

NOT AX		;将AX中内容按位取反,结果送回AX
NOT WORD PTR[SI]		;将[SI]所指向两个单元中的内容按位取反,再送回这两单元

4、逻辑“异或” XOR

指令格式:XOR OPRD1,OPRD2 ;OPRD1←OPRD1⊕OPRD2
指令功能:XOR是将源操作数和目的操作数按位进行“异或”,结果送回目标操作数。“异或”操作原则是:两位操作数相同时结果为0.不同时结果为1
例如:

XOR AX,1122H		;AX的内容与1122H"异或",结果送回AX中
XOR AX,AX			;使AX清零

5、测试指令TEST

TEST指令的格式及对操作数的要求和完成的操作和AND指令类似,区别是:TEST不将操作的结果送回目的操作数,而只是影响标志位,故这条指令常用于不破坏数据内容的情况下检测,数据的某些位,常搭配JC/JZ等条件转移指令使用。

TEST AL,02H		;若AL中Di位为1,则ZF=0,否则=1

二、移位指令

在这里插入图片描述

1)非循环移位

非循环移位分为算术移位和逻辑移位,逻辑移位针对的是无符号数,而算数移位针对的是有符号数。

1、算数左移SAL和逻辑左移SHL

指令格式:
SHL OPRD,1 SAL OPRD,1
SHL OPRD, CL SAL OPRD,CL
指令功能: 算数左移指令SAL和逻辑左移指令SHL的执行完全相同的操作,都是将目的操作数的内容左移一位或者CL所指定的位数,每左移一位,左边的最高位移入标志位CF,而在右边的最低位补零。
在这里插入图片描述
注意:当移位之后的CF和最高位状态不同时,OF标志被影响为1,表示溢出状态;
由于左移指令比乘法指令执行速度快得多,在程序中的无符号数的乘2运算用左移指令来代替乘法指令可加快程序的运行。

MOV AL,41H
SHL AL,1		;视为有符号数时,溢出,82H > 7FH

2、逻辑右移SHR

指令格式:SHR OPRD ,1
或: SHR OPRD ,CL
指令功能:逻辑右移指令将目的操作数的内容向右移一位或者CL指定的位数,每右移一位,右边最低位移入标志位CF,最高位补0。(算术右移的不同之处)
在这里插入图片描述
注意:SHR指令也影响标志位CF和OF,如果移动次数为1,且移位之后最高位和次高位不相等,则标志OF=1,否则OF=0,若移动次数不固定,则OF状态不定。
和左移指令类似,每逻辑左移一位,就相当于无符号数除以2,因此可利用SHR指令加快程序中除法运算的执行。

MOV AL,82H
SHR AL,1		;执行结果,AL=41H,CF=0,OF=1

3、算术右移SAR

指令格式:SAR OPRD,1
SAR OPRD,CL
指令功能:算术右移SAR指令和SHR都是右移指令,两者不同之处在于,算术右移不改变最高位(符号位)的状态,每右移一次,最高位保持原最高位的状态,其余和逻辑右移没有区别。
注意:SAR指令对CF,PF,SF,和ZF有影响,但不影响OF,AF
在这里插入图片描述

2)循环移位

循环移位分为带CF的循环移位RCL/RCR和不带CF的循环移位ROL/ROR

1、带CF的循环左移 RCL

指令格式:RCL OPRD,1
RCL OPRD ,CL
指令功能:带CF的循环左移指令RCL是将目的操作数左移一位或CL的指定位,每左移一位,最低位移入CF标记,原CF标记补入到最高位
在这里插入图片描述

2、带CF的循环右移 RCR

指令格式:RCR OPRD,1
RCR OPRD,CL
指令功能:带CF的循环右移指令是将目的操作数右移一位或CL的指定位,每右移一位,最高位移入CF标志,原CF标志补入到最低位。
在这里插入图片描述

;检测BL寄存器中第4位的状态,并保持原内容不变
MOV CL,4
ROL BL,CL		;CF←BL第4位
JNC ZERO		;JNC指令在当CF标志位为0时,跳转到ZERO
ROR BL,CL		;恢复原BL的内容

3、不带CF的左移循环 ROL

指令格式:ROL OPRD, 1
ROL OPRD,CL
指令功能:不带CF的循环左移和带CF的循环左移指令的区别只有是否带CF标志位,不带CF的左移指令每左移一位,直接将最高位同时送入CF和最低位实现左移。
在这里插入图片描述

4、不带CF的右移循环 ROR

指令格式:ROR OPRD,1
ROR OPRD,CL
指令功能:不带CF的循环指令和带CF的循环右移指令的区别在于是否带CF标志位,不带CF标志位的右移指令每右移一次,直接将最低位直接送入CF和最高位实现右移。
注意:ROR和ROL指令移位一次,新的最高位和次高位不等,则标志位OF=1,否则OF=0;若移位次数不为1,则OF状态不定。
在这里插入图片描述

MOV AL,82H
ROL AL,1  		;结果:AL=05H,CF=1,OF=1

助记

SAL(Shift Arithmetic Left)
SAR(Shift Arithmetic Right)
SHL(Shift Logic Left)
SHR(Shift Logic Right)
ROL/ROR 不带CF,(稍有牵强,哈哈)
RCL/RCR 带CF
还是主张多加练习,自然就会熟练使用。记忆也是自然的事


http://chatgpt.dhexx.cn/article/eje0vPI3.shtml

相关文章

arm64汇编学习-(3)算术与移位指令

arm64汇编学习-(3)算术与移位指令 1 数据处理指令1.1 check the C condition of adds, adc,cmp1.1.1 测试示例程序1.1.2 执行之前1.1.3 执行之后1.1.3.1 ldr和mov指令之后1.1.3.2 ads和adc指令之后1.1.3.3 cmp和adc指令之后 1.2 cmp和sbc指令的综合运用1…

汇编语言——逻辑运算和移位指令

逻辑运算和移位指令 逻辑运算指令 逻辑与AND 格式 AND reg, imm/reg/mem ;reg←reg^imm/reg/mem AND mem, imm/reg ; mem←-mem ^ imm/reg功能:对两个操作数执行按位的逻辑与运算,结果送到目的操作数说明: (1)按位的逻辑与运算; (2)操作数不能同时为存储器操作数…

汇编语言基础之 移位指令

原文: http://bdxnote.blog.163.com/blog/static/ 移位指令是一组经常使用的指令,包括:算数移位、逻辑移位、双精度移位、循环移位、带进位的循环移位; 移位指令都有一个指定需要移动的二进制位数的操作数,该操作数可以是立即数,也可以是CL的值;在8086中,该操作数只能是1,但是在…

x86汇编_移位和循环移位指令简介_笔记46

移位指令与前面介绍的按位操作指令一起形成了汇编语言最显著的特点之一。位移动 (bit shifting) 意味着在操作数内向左或向右移动。x86 处理器在这方面提供了相当丰富的指令集如下表所示,这些指令都会影响溢出标志位和进位标志位。 英文全称汇编指令中文翻译说明意…

PLC移位循环指令

PLC移位循环指令 一、移位指令 移位指令包括无符号数移位和有符号数移位。 其中无符号数移位包含字左移指令、字右移指令、 双字左移指令和双字右移指令;有符号数移位包含整数右移指令和双整数右移指令。 1、无符号数移位指令 (1)字左移指…

ARM64体系结构编程3-算数和移位指令

条件操作码 条件标志位描述N负数标志(上一次运算结果为负值)Z零结果标志(上一次运算结果为零)C进位标志(上一次运算结果发生了无符号溢出)V溢出标志(上一次运算结果发生了有符号溢出&#xff0…

逻辑、移位操作与空指令的实现

逻辑、移位操作和空指令的实现 1. 流水线数据相关的问题 流水线上经常会有一些被称为“相关”的情况发生,它使得指令序列中下一条指令无法按照设计的时钟周期执行,这些“相关”会降低流水线的性能。 1.1 流水线相关 流水线中的相关可分为&#xff1a…

汇编移位指令SHR,SAR,SAL/SHL,ROR,ROL,RCR,RCL

目录 逻辑右移SHR 算数右移SAR(重点) 算数/逻辑左移SAL/SHL(完成的操作都一样) 循环右移ROR 循环左移ROL 带进位循环右移RCR 带进位循环左移RCL 总结 例题 一 二 移位指令为双操作数指令,用于将目的的操作数中的二进制数移位。 目…

位移指令实现乘法、除法计算

前言 大家都知道51单片机是有乘法、除法指令的,不管是用C语言还是汇编语言,都是可以直接计算乘法、除法的,我以为,-,*,/ 这些算术运算是单片机的标配,而我公司使用的应广单片机居然没有乘法、除…

微机原理——移位指令

例题 思路 选择移位语句,右移,将AL移出的送入DX左端,将BL移出的送入DX左端。循环八次 MOV AL,01100101B; MOV BL,11011010B; XOR DX,DX;两个值相同,异或结果为0。等效:MOV DX,0 MOV CX,8;count L1: SHR AL,1;逻辑右…

汇编语言---移位指令

移位指令是一组经常使用的指令,包括:算数移位、逻辑移位、双精度移位、循环移位、带进位的循环移位; 移位指令都有一个指定需要移动的二进制位数的操作数,该操作数可以是立即数,也可以是CL的值;在8086中,该操作数只能是1,但是在其后的CPU中,该立即数可以是定义域[1,31]之内的数…

汇编语言——移位指令

基本概念 移位操作指令:移位操作指令是一组经常使用的指令,属于汇编语言逻辑指令中的一部分,它包括移位指令(含算术移位指令、逻辑移位指令),循环移位指令(含带进位的循环移位指令)&…

汇编指令之移位指令

移位指令包括了 算术移位指令、逻辑移位指令、循环移位指令。 格式为:xxx oper1,CL/1 ;移位次数只能是1或者存放在CL里面。 一、算术移位指令 1、算术左移指令SAL 功能:左移一次,最低位补0,最高位送入CF标志位,如图&am…

汇编指令(四)移位指令

学习概要 格式 移位指令主要分四种 一、逻辑移位指令 1.逻辑左移指令SHL 2.逻辑右移指令SHR 3.逻辑移位指令的功能 二、算术移位指令 1.算术左移指令SAL 2.算术右移指令SAR 最高位不变的意思就是,最高位原来是1(0),右移过后…

【大学生软件测试基础】白盒测试 - 语句覆盖 - 03

任务1、依据源代码画出程序流程图; 任务2、根据程序流程图,找出程序的所有执行路径; 任务3、找出能覆盖所有语句的最少路径; 任务4、根据最少路径设计语句覆盖用例; 流程图: 任务2、根据程序流程图&…

修正的判定条件覆盖例题_语句覆盖、判断覆盖、条件覆盖、条件判定组合覆盖、多条件覆盖、修正条件覆盖...

int function(bool a,bool b,boolc){intx; x=0;if(a&&(b||c)){x=1;returnx; } } 1、语句覆盖(SC) 选择足够多的测试数据,使得被测程序中的每条语句至少执行一次。 测试用例:a=T,b=T,c=T 2、判断覆盖(DC) 设计足够的测试用例,使得程序中的每个判定至少都获得一次真值…

语句覆盖,判定覆盖,条件覆盖,条件/判定覆盖,条件组合覆盖,路径覆盖

最近在复习软件测试的考试,每次到白盒测试这里都要为这几种逻辑覆盖方法感到头疼,这次终于决定好好整理出来。 逻辑覆盖是通过对程序逻辑结构的遍历实现程序的覆盖。它是一系列测试过程的总称,这组测试过程逐渐进行越来越完整的通路测试。 根…

软件测试培训之:白盒测试的语句覆盖法和判定覆盖法

白盒测试是相对于黑盒测试而言的,黑盒测试不关注程序内部的实现结构,仅仅是通过向程序进行输入来观察程序的输出对不对;白盒测试就需要关注程序内部的实现结构,对程序的逻辑结构实施相关的测试;那么下面来谈谈语句覆盖法、判定覆盖法和条件覆…

语句覆盖、判定覆盖、条件覆盖 - 白盒笔试题解析

1. 定义 黑盒测试 - 不关注内部结构的测试/基于输入输出的测试 白盒测试 - 基于内部结构的测试 白盒测试的关键: 覆盖度 2. 白盒相关概念 语句覆盖 - 设计一套测试 让被测对象中所有语句得到测试覆盖 判定覆盖 - 设计一套测试 让被测对象中所有判定得到测试覆…

白盒测试用例设计方法(语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖、基本路径覆盖)

语句覆盖:每条语句至少执行一次。 判定覆盖:每个判定的所有可能结果至少出现一次。(又称“分支覆盖”) 条件覆盖:每个条件的所有可能结果至少执行一次。 判定/条件覆盖:一个判定中的每个条件的所有可能结果…