【问题标题】:What does the 'and' instruction do to the operands in assembly language?'and' 指令对汇编语言中的操作数有什么作用?
【发布时间】:2018-12-04 00:18:41
【问题描述】:

'and' 指令在汇编语言中的作用是什么?有人告诉我,它会检查操作数的位顺序并将 1 设置为 true,将其他任何内容设置为 false,但我不知道它实际上做了什么或它对代码有什么影响。

【问题讨论】:

  • 这应该在任何具有and 指令的汇编程序的文档中进行描述。它在两个操作数之间执行按位布尔“与”。换句话说,对应的位(每个操作数中的第 n 位)在布尔运算意义上被与,给出结果的第 n 位。在布尔逻辑中,1 和 1 = 1,但 0 和 x(其他任何值)= 0。因此,10111010 and 01101011 的结果为00101010。如果您不熟悉布尔逻辑,我建议您从那里开始查找,因为它是大多数电子计算机工作方式的基本基础。
  • 这能回答你的问题吗? Understanding the bitwise AND Operator

标签: assembly bitwise-operators instructions bitwise-and


【解决方案1】:

AND 指令按以下方式比较两个操作数中的位:

Bit position 1234 5678
Operand A -- 1101 1001
Operand B -- 1001 0111
             _________
Result ----- 1001 0001

位置 1、4 和 8 的位在两个字节中都为真,因此结果字节的位置 1,4 和 8 将为真。结果将存储在第一个操作数中。

【讨论】:

    【解决方案2】:

    对于 32 位寄存器,它执行 32 个单独/独立的布尔 and 操作,每个位位置一个。 (如果两个输入都为真,则为真,否则为假。)

    output[4] = a[4] & b[4],此伪代码语法将输入/输出描述为位数组。

    这与 C 的按位运算 &&= 运算符完全相同。

    (不是 C 的 && 逻辑与运算符,用于检查 !=0)。

    【讨论】:

    • 所以它检查两个操作数是否相同?
    • @user548010:不,它与两个位图相交。结果的第 3 位不依赖于任一输入的第 4 位。
    【解决方案3】:

    指令and 对其操作数执行按位与运算。例如,指令and al, bl 应该计算寄存器albl(如@Serkratos121 所示)的AND 运算并将结果存储在al 寄存器中。

    它可用于清除寄存器中的位。一个流行的例子是将小写字符转换为大写。将m 转换为M。可以写:

    mov al, 'm' ; this moves the ascii code of m i.e. 109 to al register
    

    现在,要转换此大写字母,请从 al 中减去 32。但是不用sub al, 32d,可以这样写:

    and al, 11011111b ; this clears the 5th bit (LSB is 0th bit)
    

    所以,al 现在包含 77,这是 M 的 ascii 代码。

    【讨论】:

      猜你喜欢
      • 2022-01-05
      • 2011-08-13
      • 1970-01-01
      • 2011-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多