永发信息网

汇编语言中逻辑运算符怎么计算

答案:4  悬赏:0  手机版
解决时间 2021-04-06 07:52
  • 提问者网友:山高云阔
  • 2021-04-06 04:10
汇编语言中逻辑运算符怎么计算
最佳答案
  • 五星知识达人网友:鱼芗
  • 2021-04-06 04:48
汇编语言逻辑运算(and,or,xor,..)(按位)


或(or)
格式:OR OPRD1,OPRD2
指令执行后:CF=0,OF=0,标志PF/ZF/SF反映运算结果,标志位AF未定义。作用:保证某些位不变,某些位设为1。和“0”做或运算保持不变,和“1”做或运算设置为1。某个操作数自身或,值不变。
eg:or eax,eax      ;eax=00000008
       je XXXXXXXX  ;判断eax,为空就跳。。用户名或密码为空就跳走。。
                              ;或之后,eax仍为00000008
2.异或(xor)
    格式:XOR OPRD1,OPRD2,
    异或执行的规则如下:
    XOR 0,0 = 0 
    XOR 0,1 = 1
    XOR 1,0 = 1
    XOR 1,1 = 0
    指令执行后:CF=0,OF=0,标志位PF,ZF,SF反映运算结果,标志为AF未定义。
    作用:和“0”异或保持不变,和“1”异或则取反。
    如果一个操作数XOR A,A,则A会被置0,CF=OF=0,ZF=1,PF=1,SF=0
3.与(and)
    格式:AND OPRD1,OPRD2
    执行指令后:CF = 0,OF = 0,标志位PF,ZF,SF反映运算结果,标志位AF未定义。
    某个操作数自己与自己相“与”,则值不变,可使CF清0
     作用:是使操作数中的某些为保持不变,其它为清零。和"1"与保持不变,和“0”与清零。
4.否(NOT)
    指令格式如下:
    NOT OPRD
    执行指令后:OPRD各位取反,操作数可是通用寄存器可是存储单元,但是不能是立即         数。对标志位没有影响。
全部回答
  • 1楼网友:woshuo
  • 2021-04-06 07:48
百度百科有
  • 2楼网友:愁杀梦里人
  • 2021-04-06 06:18
就是按数字电路中的逻辑运算来计算
  • 3楼网友:蕴藏春秋
  • 2021-04-06 05:10
常量
  常量是一个立即数,直接写在汇编语言语句中,在程序的执行过程中,它不可能发生变化。通常,我们用二进制、八进制、十进制或十六进制来书写常量。   例如:10101011B、324Q、1234D、1234H、0abcdH、'AB'等都是常量。   在程序中,我们还可用伪指令.RADIX来改变数据的基数,在后面再详细讲解。
算术运算符
  算术运算符包括符号:+(正)、-(负),运算符:+(加)、-(减)、*(乘)、/(除)和MOD(取模)。这些运算符和常量、括号可组成数值表达式。   如:120+(321-90) mod 3,322*5/32,0abcdH+5,-590等
关系运算符
  关系运算符包括符号:EQ(相等)、NE(不等)、LT(小于)、GT(大于)、LE(小于等于)和GE(大于等于)。这些关系运算符和常量、括号也可组成数值表达式。该表达式的计算结果规定如下:   若关系不成立,则该数值表达式的计算结果为0;否则,其结果为0FFFFH。   如:120H LT 100H+3,21H LE 21H等,它们的计算结果分别为:0和0FFFFH。
逻辑运算符
  逻辑运算符包括按位操作符和移位操作符。具体是:AND(逻辑与)、OR(逻辑或)、NOT(逻辑非)、XOR(异或)、SHL(左移位)和SHR(右移位)。这些逻辑运算符和常量、括号可组成数值表达式。   如:1 SHL 3,47H AND 0FH,NOT 56H等,它们的计算结果分别为:8,7和0A9H。
编辑本段表达式中的其它操作符
  汇编语言中,还有其它可在数值表达式中使用的操作符。它们是:   、HIGH(高8位)、LOW(低8位)   、SEG(段地址)、OFFSET(偏移量)   、TYPE(标识符类型)、LENGTH(变量长度)、SIZE(变量容量)   、WIDTH(记录/记录字段宽度)、MASK(记录/记录字段的屏蔽位)等   在以上操作符中,只有HIGH和LOW没有介绍过,它们分别是选取表达式计算结果的高8位和低8位。其使用格式如下:   HIGH 表达式 LOW 表达式   如:HIGH (1234H+100H),LOW 1234H等,它们的选取结果分别为:13H和34H。
编辑本段运算符和操作符的优先级
  在汇编语言中,有许多各种运算符和操作符,它们的优先级按从高到低的排列如下:   优先级:高   LENGTH、SIZE、WIDTH、MASK、()、[]、.(用于结构字段)、<>(用于记录类型)   PTR、SEG、OFFSET、TYPE、THIS、:(用于段超越前缀)   *、/、MOD、SHL、SHR   HIGH、LOW   +、-   EQ、NE、LT、LE、GT、GE   NOT   AND   OR、XOR   优先级:低   SHORT
MASM 数值和运算符
  MASM(Microsoft 宏汇编器)表达式语法是 Debugging Tools for Windows 4.0 之前版本中的 NTSD, CDB, KD 和 WinDbg 惟一使用的语法。
MASM 表达式中的数值
  MASM 表达式中的数值能够以 16, 10, 8 或者 2 为基数方式输入。   n (Set Number Base) 命令可用来设置缺省基数为 16, 10 或者 8。所有不带前缀的数值都以该基数来解释。通过指定 0x 前缀(十六进制),0n 前缀(十进制),0t 前缀(八进制),或者 0y 前缀(二进制)能够掩盖缺省基数。也可以添加一个 h 后缀表示十六进制数值。数值里面的字母可以是大写或者小写,所以 "0x4AB3", "0x4aB3", "4AB3h", "4ab3h" "4aB3H" 都表示相同意思。   如果表达式中前缀后面没有跟一个数值,它被读作 0。所以,0 可以写成三种形式:0,前缀后面跟一个 0,单独一个前缀。例如,在十六进制下,"0", "0x0" 和 "0x" 都表示相同意思。   能够以 xxxxxxxx`xxxxxxxx 格式输入 64 位的十六进制数值,或者忽略当中的重音符号(`)。包含重音符号会使得自动符号扩展无效,详细请看符号扩展。
MASM 表达式中的符号
  在 MASM 表达式中,任意符号的数值都是它的内存地址。根据引用符号的不同,可以是全局变量、局部变量、函数、段、模块或者任何其它可识别标签的地址。   如果会混淆,你可以给符号添加一个模块名和一个感叹号(!)做为前缀,或者只加一个感叹号。关于符号识别,详细请看符号语法和符号匹配。   两个冒号(::)或者两条下划线(__)可以用来标志类的成员。   只有以模块名和感叹号为前缀的符号名中才能使用重音符号(`)或者撇号(')。
MASM 表达式中的数值运算符
  表达式的任意组件都可以用一元运算符来修改,任意两个组件都可以用二元运算符组合起来。一元运算符优先于二元运算符。当用到多个二元运算符时,遵循已定的优先级规则。   总是可以用圆括号来掩盖优先级规则。   如果 MASM 表达式的某一部分被圆括号括住并有两个 @ 前缀 - @@( ... ) - 该部分将根据 C++ 表达式规则来解析。在两个 @ 记号之间以及和左圆括号之间不能有空格。也可以通过使用 @@c++( ... ) 或者 @@masm( ... ) 指定表达式求解器。   当执行算术运算时,MASM 表达式求解器把所有的数值和符号当做 ULONG64 类型。   一元地址运算符寻址时假定 DS 为缺省段。按运算符的优先级顺序计算表达式。如果两个相邻的运算符优先级一样,则从左往右计算表达式。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯