Assembly 将0x80000000添加到注册赢得的';当试图建立一个面具时,它不起作用

Assembly 将0x80000000添加到注册赢得的';当试图建立一个面具时,它不起作用,assembly,masking,Assembly,Masking,给定以下代码: .section .rodata input_format: .string "%d" output_format1: .string "" output_format2: .string "" .section .text .globl main .type main, @function main: pushl %ebp movl %esp, %ebp .loop: addl $-4 ,%esp

给定以下代码:

.section .rodata

input_format:  .string  "%d"
output_format1: .string  ""
output_format2: .string ""

.section .text
.globl  main
    .type main, @function
main:
    pushl   %ebp
    movl    %esp,   %ebp

.loop:
    addl    $-4 ,%esp           # moving down the stack
    pushl   %esp
    pushl   $input_format
    call    scanf               # call scanf to get a number from the user
    addl    $8,%esp
    movl    (%esp),%edx         # get the new number

    movl    $0,%esi             # reseting first mask
    addl    $0x1,%esi           # first mask of 0x1
    movl    $0,%ecx             # reseting second mask
    addl    $0x80000000,%ecx

        // more code in the future

    # return from printf:

    movl    %ebp,%esp
    popl    %ebp
    ret
我试图建立一个面具,以确定一个给定的数字是否是回文。 因此,我需要屏蔽,首先是所有的零和MSB中的一个“1”位,然后是另一个 使用LSB中的所有零和“1”位,然后运行16次,并使用和比较结果。
但是,当写入
addl$0x8000000,%ecx
时,寄存器
%ecx
不会立即获得
0x8000000
。为什么会这样?

什么是0x8000000+0x8000000?这就是为什么它似乎不起作用的原因

要设置高位,请使用位操作

 orl  $0x80000000, %ecx

0x80000000+0x80000000是什么?这就是为什么它似乎不起作用的原因

要设置高位,请使用位操作

 orl  $0x80000000, %ecx

经过进一步思考,我认为我需要编写addl$0x8000,%ecx。我说得对吗?取决于哪个位是标志位。我有32位,所以我需要LSB(最左边的)为“1”,然后每次迭代都将其右移。是的,我非常确定没有x86操作码可以在一步中生成完整的4字节文字值。不过,有人会认为汇编程序会抱怨。什么是“完整的4字节文字值”?经过进一步思考,我认为我需要编写addl$0x8000,%ecx。我说得对吗?取决于哪个位是标志位。我有32位,所以我需要LSB(最左边的)为“1”,然后每次迭代都将其右移。是的,我非常确定没有x86操作码可以在一步中生成完整的4字节文字值。不过,有人会认为汇编程序会抱怨。什么是“完整的4字节文字值”?仍然不起作用,你写的那行后面的'ecx'值是:-2147483648。@ron---2147483648是0x8000000。是的,我在写了那条评论一分钟后得到了这个值。因此,我想现在对每两位进行AND和ing并比较结果不会有任何问题。那么,为什么这会起作用,而0->ecx,将0x8000000添加到ecx不起作用?仍然不起作用,您写的行后面的“ecx”的值是:-2147483648。@ron--2147483648是0x8000000。是的,我在写了那个注释后一分钟就得到了。因此,我想现在对每两个位进行AND和ing并比较结果不会有任何问题。那么,为什么这会起作用而0->ecx,将0x8000000添加到ecx不起作用呢?