Учитывая следующий код:
.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
Я пытаюсь создать маску, чтобы определить, является ли данное число палиндромом.Поэтому я хочу использовать маски, сначала со всеми нулями и битом 1 в MSB, а другой со всеми нулями и битом 1 в младшем бите, а затем выполнить 16 раз и сравнить результат, используя AND.Однако при записи addl $0x80000000,%ecx
регистр %ecx
не получит немедленный 0x80000000
.Почему это так?