`
nannan408
  • 浏览: 1756012 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

汇编的移位如rol和逻辑运算具体对标志位的影响(转)

 
阅读更多
AND XOR TEST SHL SAL ROL RCL 
OR NOT  SHR SAR ROR RCR 

AND, OR , XOR 和 TEST都是双字节操作指令,操作数的寻址方式的规定与算术运算指令相同.

NOT是单字节操作指令,不允许使用立即数.

逻辑运算均是按位进行操作,真值表如下:

AND (位与&) OR ( 位或| ) XOR  ( 位异或^ )  
1 & 1 = 1

1 & 0 = 0

0 & 1 = 0

0 & 0 = 0
1 | 1 = 1

1 | 0 = 1

0 | 1 = 1

0 | 0 = 0
1 ^ 1 = 0

1 ^ 0 = 1

0 ^ 1 = 1

0 ^ 0 = 0
  

 



A:逻辑运算指令

AND (and) 逻辑与指令

AND    DST , SRC           //Byte/Word

执行操作:dst = dst & src

1.AND指令执行后,将使CF=0,OF=0,AF位无定义,指令执行结果影响SF,ZF和PF标志位.

2.AND指令典型用法A:用于屏蔽某些位,即使某些位为0.

屏蔽AL的高4位:即将高4位和0000B相与,低4位和1111B相与

MOV AL , 39H     //AL= 0011 1001B[39H]

ADD AL , 0FH    // AL= 0000 1001B[09H]  即0011 1001B[39H]  &  0000 1111B[0FH] = 0000 1001B[09H]

3.AND指令典型用法B:取出某一位的值(见TEST)



 

OR (or) 逻辑或指令

OR    DST ,  SRC         //Byte/Word

执行操作:dst = dst | src

1.OR指令执行后,将使CF=0, OF=0, AF位无定义,指令执行结果影响SF, ZF和PF标志位.

2.常用于将某些位置1.

将AL的第5位置1:

MOV AL , 4AH    // AL=0100 1010B[4AH]

OR    AL , 10H      // AL=0101 1010B[5AH]   即0100 1010B[4AH]  |  0001 0000B[10H] =0101 1010B [5AH]



 

XOR (eXclusive OR) 逻辑异或指令

XOR    DST , SRC        //Byte/Word

执行操作:dst = dst ^ src

1.XOR指令常用于使某个操作数清零,同时使CF=0,清除进位标志.

2.XOR指令使某些位维持不变则与 '0' 相异或,若要使某些位取反则与 '1'相异或.

将AL的高4位维持不变,低4位取反:

MOV AL, B8H    //AL=1011 1000B[B8H]

XOR  AL, 0FH    //AL=1011 0111B[B7H] 即1011 1000B[B8H] ^ 0000 1111[0FH]=1011 0111B[B7H]

测试某一个操作数是否与另一确定操作数相等:

XOR    AX , 042EH

JZ       ....   //如果AX==042EH, 则ZF=TRUE(1), 执行JZ...



NOT (not) 逻辑非指令

NOT    OPR                        //Byte/Word

执行操作:opr = ~opr   // ~ 01100101 [65H] =10011010 [9AH]

1.操作数不能使用立即数或段寄存器操作数,可使用通用寄存器和各种方式寻址的存储器操作数.

2.NOT指令不影响任何标志位。

将AL各位取反:

MOV AL,65H    //AL=0110 0101B[65H]

NOT AL             //AL=1001 1010B[9AH]  即 ~ 0110 0101B[65H]=1001 1010B[9AH]





TEST (test) 指令

TEST    OPR1 , OPR2        //Byte/Word

执行操作:opr1 & opr2

1.两个操作数相与的结果不保存,结果影响标志位PF,SF和ZF,使CF=0, OF=0,而AF位无定义.

2.TEST指令常用于在不改变原有的操作数的情况下,检测某一位或某几位的条件是否满足.只要令用来测试的操作数对应检测位为1,其余位为0,相与后判断零标志ZF值的真假.

检测某位是否为1:

令用来测试的操作数对应检测位为1,其余位为0,TEST指令后,若该位为1则 JNZ...

TEST AL , 0000 00001B   //测试AL最低位是否为1:: 令用来测试的操作数对应检测位为1,其余位为0,执行TEST指令

JNZ   THER     //最低位若为1, 则ZF=FALSE(0), 执行JNZ THER, 否则执行下一条指令.

或者:先对操作数求反,令用来测试的操作数对应检测位为1,其余位为0,TEST指令后,若该位为1则JZ...

MOV    DL , AL    //将AL 传送到DL,主要是不要影响AL的值.   以下测试AL的b2位是否为1

NOT    DL     //先对操作数求反

TEST    0000 0100B //令用来测试的操作数对应检测位为1,其余位为0,执行TEST指令

JZ    THER        //若AL的b2位为1,则ZF=TRUE(1), 执行JZ    THER

 

 

B:移位指令[所有的移位指令都影响标志位CF、OF、PF、SF和ZF.AF无定义.]

非循环逻辑移位:把操作数看成无符数来进行移位.

SHL ( SHift logical Left )逻辑左移指令

SHL    OPR , CNT     //Byte/Word

执行操作:使OPR左移CNT位,并使最低CNT位为全0.

1.OPR操作数不能使用立即数或段寄存器操作数,可使用通用寄存器和各种方式寻址的存储器操作数.

2.移位次数由CNT决定.每次将OPR的最高位移出并移到CF,最低位补0.

MOV  CL , 7            //若移位多次, 先预置移位次数CL

SHL    DX ,  CL       //CNT可取1或CL寄存器操作数



SHR (SHift logical Right) 逻辑右移指令

SHR    OPR , CNT        //Byte/Word

同SHL,每次将OPR的最低位D0移出并移到CF.最高位补0.





非循环算术移位:将操作数看成有符号数来进行移位.

SAL (Shift Arithmetic Left) 算术左移指令

SAL    OPR , CNT         //Byte/Word

SAL指令与SHL指令完全相同



SAR(Shift Arithmetic Right) 算术右移指令

SAR    OPR , CNT        //Byte/Word

SAR指令每次移位时,将最高位移入次高位的同时最高位值不变,最低位D0移出并移到CF.





循环移位指令

ROL ( ROtate Left) 循环左移指令

ROL    OPR , CNT        //Byte/Word

每次移位时,最高位移出并同时移到CF和最低位D0.



ROR (ROtate Right)循环右移指令

ROR    OPR,CNT    //Byte/Word

每次移位时,最低位D0移出并同时移到CF和最高位.





带进位循环移位指令

RCL (Rotate Left through Carry)带进位循环左移指令

RCL    OPR,CNT     //Byte/Word



RCR (Rotate Right through Carry)带进位循环左移指令

RCR    OPR ,CNT       //Byte/Word

 
分享到:
评论

相关推荐

    易语言汇编运算指令模块

    易语言汇编运算指令模块源码,汇编运算指令模块,汇编_Ulong,汇编_Ushort,汇编_Uchar,汇编_XOR,汇编_OR,汇编_AND,汇编_ADD,汇编_SHL,汇编_SHR,汇编_ROL,汇编_ROR,汇编_RCL,汇编_RCR,汇编_NOT

    汇编语言指令系统、伪指令

    循环移位指令ROL、ROR、RCL、RCR 程序   流程   控制   指令 转移指令 无条件转移指令JMP 条件转移指令Jcc 循环控制指令 LOOP、LOOPE/LOOPZ、LOOPNE/LOOPNZ 子程序调用与返回指令 CALL、RET ...

    汇编指令(chm格式)

    以上四条,测试无符号整数运算的结果(标志C和Z). JG/JNLE 大于转移. JGE/JNL 大于或等于转移. JL/JNGE 小于转移. JLE/JNG 小于或等于转移. 以上四条,测试带符号整数运算的结果(标志S,O和Z). JE/JZ 等于...

    ALU实验报告.doc

    本实验中的ALU要求实现基本的算术运算、逻辑运算、移位运算等,具体功能如下: "操作码 "功能 "描述 " "ADD "A+B "加法 " "SUB "A-B "减法 " "AND "A and B "与 " "OR "A or B "或 " "XOR "A xor B "异或 " "NOT ...

    易语言汇编实现左移右移模块

    易语言汇编实现左移右移模块源码系统结构:asm_rol,asm_ror,asm_rcl,asm_rcr,asm_shl,asm_shr,asm_not, ======程序集1 || ||------_启动子程序 || ||------_临时子程序 || ||------asm_rol || ||------asm_ror || ||-...

    S71200移位指令 附跑马灯程序.docx

    S7-1200 PLC中的移位和循环移位指令指令包括了移位指令SHL和SHR,循环移位指令ROL和ROR。

    程序员二进制计算器 v1.36

    支持与、或、非、异或、移位(循环、逻辑、算术),直接读写二进制位,指定位段读、写、置1、清0、反转。 二进制数据表达方式多样,数据可以K、M、G等单位为后缀。 支持类C语言库函数调用。 结果可以各种进制、各种...

    avr单片机中左移位和右移位指令

    本文主要讲了avr单片机中左移位和右移位指令,下面一起来学习一下

    汇编复习题

    5、执行INC指令除对SF、ZF有影响外,还要影响的标志位是(A)。A、OF,AF,PF B、OF,AF,CF C、OF,PF,CF D、AF,PF,CF 6、设DH=10H,执行NEG DH指令后,正确的结果是(D)。A、DH=10H CF=1 B、DH=0F0H CF=0 C、DH=...

    x86架构汇编指令介绍

    本文将介绍X86汇编语言中的指令,包括基本指令、数据传输指令、算术指令、逻辑指令、条件跳转指令等,读者可以通过本文快速了解X86汇编语言中各个指令的含义和使用方法。无论您是刚刚接触汇编语言的初学者,还是已经...

    80x86指令使用实验

    4.将dx、ax两个寄存器组合构成32位数据(dx中是高位)实现rol和rcr移位。 5.在debug中定义内存单元如下,统计其中0的个数; 6.使用例子说明求操作数的补码和相反数运算的不同。 7. 编写程序段,查找字符串中是否含有...

    汇编语言_期末考试_试题.

    24.当标志位________=1时表示无符号数运算产生溢出,而当标志位________=1是表示带符号数运算产生溢出。25.如JMP指令采用段间间接寻址,那么由4个相邻字节单元中存放有转移地址,其中前两个字节存放的是________,...

    显控PLC移位指令说明.pdf

    移位指令包括:字左移 SHL、 双字左移 SHLD、 字右移 SHR、 双字右移 SHRD、 位左移 SHLB、 位右移 SHRB、 循环字左移 ROL、 循环双字左移 ROLD、 循环字右移 ROR、循环双字右移 RORD

    易语言汇编相关左移右移哟

    易语言汇编相关左移右移哟源码,asm_rol,asm_ror,asm_rcl,asm_rcr,asm_shl,asm_shr,asm_not

    AVR汇编百例_-_计算程序

    16位整数被乘数*16位小数乘数-->16位整数积,精确到0.5 MUL165: RCALL MUL16 ;先得到32位积 SBRS R14,7 ;积小数部分最高位为1,将整数部分加1 RET ;否则返回 LDI R17,255 SUB R13,R17 SBC R12,R17 ;以减去-1($...

    汇编语言程序中的数字表达式及运算符

    数字表达式一般由数字常量、数字变量、数字运算符和括号构成。与数字表达式相关的运算符如下: ... 以X和Y表示两个数字表达式,以上的移位运算符代表的运算如下。  X:ROL:Y 表示将X循环左移Y

    简单IO应用,流水灯控制,汇编语音,8086

    实验1 简单IO应用—流水灯控制 实验过程需完成内容: 1、亮4个灯、暗4个灯,1亮...4、采用ROR、ROL循环移位语句(P77)及LOOP语句(P81),实现一个灯从第1个循环点亮到第8个,然后从第8个循环点亮至第1个,一直上下循环。

Global site tag (gtag.js) - Google Analytics