[X86]为啥我不能设置FPU中的控制寄存器?

发布于 2022-09-07 15:02:51 字数 2954 浏览 18 评论 3

代码如下:

  1.       1 .section .data
  2.       2 newvalue:
  3.       3         .byte 0x7f, 0x00
  4.       4 output:
  5.       5         .asciz "The control register is 0x%xn"
  6.       6 .section .bss
  7.       7
  8.       8         .lcomm control, 2
  9.       9
  10.      10 .section .text
  11.      11 .global _start
  12.      12 _start:
  13.      13         nop
  14.      14         fstcw control
  15.      15         movl control, %eax
  16.      16         pushl %eax
  17.      17         pushl $output
  18.      18         call printf
  19.      19         addl $8, %esp
  20.      20
  21.      21         fldcw newvalue
  22.      22         fstcw control
  23.      23         movl control, %eax
  24.      24         pushl %eax
  25.      25         pushl $output
  26.      26         call printf
  27.      27         addl $8, %esp
  28.      28
  29.      29         movl $1, %eax
  30.      30         movl $0, %ebx
  31.      31         int $0x80
  32.      32

复制代码编译命令:

  1. as -gstabs -o mysetprec.o mysetprec.s
  2. ld -o mysetprec -dynamic-linker /lib/ld-linux.so.2 -lc mysetprec.o

复制代码查看结果:

[root@test llz]# ./mysetprec
The control register is 0x37f
The control register is 0x7f /*这里说明已经设置好了*/
[root@test lz]# ./mysetprec
The control register is 0x37f /*为什么这里读出来还是原始的值,而不是上面设置好的0x7f??*/
The control register is 0x7f
[root@test lz]#

有什么地方没理解对?
望指正,谢谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一场春暖 2022-09-17 15:00:07

低级错误了
忘了FPU也属于task context的一部分。。。

邮友 2022-09-17 07:44:13

都换了一个进程了,对于这个进程来说,这些寄存器都重新设过啦

橪书 2022-09-13 15:49:22

`想起你以前问的那个 内核关中断 用户态仍开
想来这个进程结束 无论回内核还是其它进程都重新来过吧

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文