Я пытаюсь сдвинуть eax вправо на 2, в настоящее время это 0x037f, и я хочу получить его до 0x0003.
Я использую Cygwin, он компилируется нормально, но когда я открываю его с помощью gdb, как только я перехожу к строке 7, я получаю ошибку заголовка.
Я пробовал изменить синтаксис на (% eax, 2, 0) (я хочу сдвинуть его влево на 2 и заполнить нулями) Я также пробовал использовать только 2, он имеет значение 8, потому что я не знаю если его сдвиг по байтам или битам.
asm(" push %%eax \n"
" push %%ebx \n"
" push %[nIn] \n"
" fstcw %[trueCWIn] \n" //store FPU CW into trueCW
" mov %[trueCWOut], %%eax \n" //store old FPU CW into tempVar
" mov %%eax, %[tempVarIn] \n" //store old FPU CW into tempVar
" shrd %%eax,8 \n" //shift FPU CW right to bytes
" add %[roundModeOut], %%eax \n" //adding rounding modifier
//shift left 2 bytes
//add in restore mask (0x007F)
" frndint \n" //do rounding calculation
//store result into n
" fldcw %[trueCWIn] \n" //restoring the FPU CW to normal
" pop %%ebx \n"
" pop %%eax \n"
: [trueCWOut] "=m" (trueCW),
[tempCWOut] "=m" (tempCW),
[maskOut] "=m" (mask),
[tempVarOut] "=m" (tempVar),
[roundModeOut] "=m" (roundMode),
[nOut] "=m" (n)
: [trueCWIn] "m" (trueCW),
[tempCWIn] "m" (tempCW),
[maskIn] "m" (mask),
[tempVarIn] "m" (tempVar),
[roundModeIn] "m" (roundMode),
[nIn] "m" (n)
:"eax", "ebx"
);
shrd
не принимает 3 аргумента? не стал быshr
делать то, что вам нужно? - person Joe   schedule 21.05.2014