gpt4 book ai didi

c - 程序接收信号SIGSEGV,ASM中使用SHRD的段错误

转载 作者:行者123 更新时间:2023-11-30 15:33:15 25 4
gpt4 key购买 nike

我正在尝试将 eax 右移 2,目前它是 0x037f,我想将其变为 0x0003。

我使用的是 Cygwin,它编译得很好,但是当我用 gdb 打开它时,一旦到达第 7 行,我就会收到标题错误。

我尝试将语法更改为 (%eax, 2, 0) (我想将其左移 2 并用 0 填充)我也尝试只使用 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"
);

最佳答案

我找到了答案,这是一个简单的语法问题。

shr $8, %%eax

之前,eax 是 0x037F。这将 eax 移动了 8 位,然后使其变为 0x0003。

关于c - 程序接收信号SIGSEGV,ASM中使用SHRD的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23773248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com