当前位置: 首页 > 编程笔记 >

Intel x86 Assembly& Microarchitecture 将进位标志移入寄存器

申屠泉
2023-03-14
本文向大家介绍Intel x86 Assembly& Microarchitecture 将进位标志移入寄存器,包括了Intel x86 Assembly& Microarchitecture 将进位标志移入寄存器的使用技巧和注意事项,需要的朋友参考一下

示例

背景

如果Carry(C)标志保存您要放入寄存器的值,那么天真的方法是执行以下操作:

    mov  al, 1
    jc   NotZero
    mov  al, 0
NotZero:

使用“ sbb”

为了避免跳转,一种更直接的方法是使用“借借相减”:

    sbb  al,al    ; Move Carry to al

如果C为零,al则将为零。否则为0xFF(-1)。如果需要0x01,请添加:

    and  al, 0x01 ; Mask down to 1 or 0

优点

  • 大约相同的大小

  • 少两个或一个指令

  • 没有昂贵的跳

缺点

  • 对于不熟悉该技术的读者来说是不透明的

  • 它改变了其他标志

 类似资料:
  • 本文向大家介绍Intel x86 Assembly& Microarchitecture 标志寄存器,包括了Intel x86 Assembly& Microarchitecture 标志寄存器的使用技巧和注意事项,需要的朋友参考一下 示例 当x86算术逻辑单元(ALU)执行像NOT和一样的操作时ADD,它将在特殊的16位FLAGS寄存器中标记这些操作的结果(“变为零”,“溢出”,“变为负”)。3

  • 本文向大家介绍Intel x86 Assembly& Microarchitecture 8位寄存器,包括了Intel x86 Assembly& Microarchitecture 8位寄存器的使用技巧和注意事项,需要的朋友参考一下 示例 前四个16位寄存器可以将其高低字节和低半字节直接作为自己的寄存器进行访问: AH和AL是AX寄存器的上半部分和下半部分。 BH和BL是BX寄存器的上半部分和下

  • 本文向大家介绍Intel x86 Assembly& Microarchitecture 32位寄存器,包括了Intel x86 Assembly& Microarchitecture 32位寄存器的使用技巧和注意事项,需要的朋友参考一下 示例 英特尔生产80386时,他们从16位处理器升级到了32位处理器。32位处理意味着两件事:要处理的数据都是32位,而要访问的内存地址是32位。为此,他们仍然

  • 本文向大家介绍Intel x86 Assembly& Microarchitecture 16位寄存器,包括了Intel x86 Assembly& Microarchitecture 16位寄存器的使用技巧和注意事项,需要的朋友参考一下 示例 当英特尔定义最初的8086时,它是一个具有20位地址总线的16位处理器(请参阅下文)。他们定义了8个通用16位寄存器-但为某些指令赋予了它们特定的作用:

  • 本文向大家介绍verilog 移位寄存器,包括了verilog 移位寄存器的使用技巧和注意事项,需要的朋友参考一下 示例 具有异步复位功能的N位深移位寄存器。            

  • 本文向大家介绍Intel x86 Assembly& Microarchitecture 调零寄存器,包括了Intel x86 Assembly& Microarchitecture 调零寄存器的使用技巧和注意事项,需要的朋友参考一下 示例 将寄存器归零的明显方法是MOV在0—例如: 请注意,这是一个5字节指令。 如果您愿意破坏标志(MOV从不影响标志),则可以使用XOR指令将寄存器与其自身按位异