Assembly x86汇编编程(GAS语法):如何获取存储在寄存器中的变量的第n位
我试图获取存储在EDX寄存器(使用GAS或AT&T语法的英特尔x86汇编)中的变量的第5位,并将其移动到ESI寄存器。然而,当我执行我的程序时,我得到以下错误: /tmp/SASM/program.asm:54:错误:找到“$”,应为“)” /tmp/SASM/program.asm:54:错误:表达式后的垃圾“$5,%edx)” 下面是我的代码:Assembly x86汇编编程(GAS语法):如何获取存储在寄存器中的变量的第n位,assembly,x86,bit-manipulation,att,Assembly,X86,Bit Manipulation,Att,我试图获取存储在EDX寄存器(使用GAS或AT&T语法的英特尔x86汇编)中的变量的第5位,并将其移动到ESI寄存器。然而,当我执行我的程序时,我得到以下错误: /tmp/SASM/program.asm:54:错误:找到“$”,应为“)” /tmp/SASM/program.asm:54:错误:表达式后的垃圾“$5,%edx)” 下面是我的代码: mov (shl $5, %edx), %esi 您必须使用多条指令来检查是否设置了第5位。但您有几种可能检查这种情况(列表还远未完成): 第一变
mov (shl $5, %edx), %esi
您必须使用多条指令来检查是否设置了第5位。但您有几种可能检查这种情况(列表还远未完成):
xorl %esi , %esi ; set ESI to 0
shrl $5 , %edx ; shift 5 bits right into CARRY
setc %sil ; set lowest bit of ESI if CARRY is set
xorl %esi , %esi ; set ESI to 0
shrl $5 , %edx ; shift 5 bits right in to CARRY
rcll $1 , %esi ; rotate CARRY flag into lowest bit of ESI
xorl %esi, %esi ; set ESI to 0
testl $16 , %edx ; AND operation of 16 decimal and ESI - check if the 5th bit is set
setnz %sil ; set the lowest bit of ESI if the TEST operation doesn't set the ZERO flag
您不能将这样的随机指令组合起来创建寻址模式。您需要至少2条说明才能执行此操作。
esi
之后应该包含哪些内容?也许可以尝试mov%edx,%esi;和$1非常感谢您的解释:D.您介意解释一下“rcll$1,%esi”如何将edx寄存器的值向右移位5位到esi寄存器中吗?我不明白您所说的“将进位标志旋转到ESI的最低位”是什么意思。ROL旋转寄存器中的位,RCL在旋转中包括进位标志。