assembly - 如何将钻头设置到位?

标签 assembly x86 fasm

mov al, 100d ; 01100100
shr eax, 1 ; cf = 0
           ; 00110010

如何在第5个位置刻录cf?

例如: 我的号码10000111。CF = 1 => 10001111

我的主要任务是使用shr(shl)制作反向字节。我想自己做,但不知道如何设置位

最佳答案

要反转位,只需将它们从源操作数移出的同一端移入目标操作数(即使用相反的移位)。示例代码:

    mov al, 100  ; input = 01100100
    mov ah, 0    ; output
    mov ecx, 8   ; 8 bits to process
next:
    shr al, 1    ; shift next bit out to the right
    rcl ah, 1    ; shift it in from the right
    loop next
    ; result in ah = 38 = 0010 1100

尽管如此,要回答您的问题:将进位移入归零的临时寄存器到给定位置,然后使用按位OR将其设置到目的地。示例代码:

mov dl, 0 ; zero temp register, without affecting CF
rcl dl, 5 ; move CF into bit #5 (use CL register for dynamic)
or al, dl ; merge into al

关于assembly - 如何将钻头设置到位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25853309/

相关文章:

c++ - 在 C++ 或程序集 (FASM) 中将原始字节转换为十六进制

c++ - 获取调用者的返回地址

c - GCC 生成 SSE 指令而不是 AVX

c - for 循环中的实际指令

assembly - FLAGS/EFLAGS 是 clobber 列表的 "CC"(条件控制)的一部分吗?

assembly - x86 程序集 : movsd instruction issue

c++ - 从 vc++ 调用存储在堆中的代码

assembly - (x86) 虚拟机通常如何处理标志?

c - 汇编 如何将操作码 DIV 转换为 C 代码

assembly - Option Rom 代码无法使用 Qemu 仿真打印预期的字符串