Добавление 0x80000000 для регистрации не будет работать при попытке создать маску - PullRequest
0 голосов
/ 20 декабря 2011

Учитывая следующий код:

.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.Почему это так?

1 Ответ

3 голосов
/ 20 декабря 2011

Что такое 0x80000000 + 0x80000000?В результате этого, похоже, он не работает.

Чтобы установить старший бит, несмотря ни на что, используйте битовые операции

 orl  $0x80000000, %ecx
...