在Intel 64和IA-32架构手册第3A卷第9章处理器管理和初始化中,我发现了以下内容:
在代码段的基础上选择兼容模式执行.此模式允许旧版应用程序与以64位模式运行的64位应用程序共存.在IA-32e模式下运行的操作系统可以通过将其代码段描述符的CS.L位清除为0来执行现有的16位和32位应用程序.
这是否意味着传统的16位和32位应用程序可以与在IA-32e模式下运行的操作系统上的64位应用程序共存.
但据我所知,64位操作系统通常不支持传统的16位代码.如果支持,我该如何启动16位应用程序?
在Intel IA-32架构手册第3A卷第2章中,CR4.OSFXSR解释如下:
置1时,使能处理器执行SSE/SSE2/SSE3/SSSE3/SSE4指令,PAUSE,PREFETCHh,SFENCE,LFENCE,MFENCE,MOVNTI,CLFLUSH,CRC32和POPCNT除外.
问题是如果我想同时使用SSE2和PREFETCHh指令,我该怎么办?
在intel软件开发人员maunal中,呼叫指令支持:
call r/m64
call m16:32
call m16:64
Run Code Online (Sandbox Code Playgroud)
在用户代码中,如果我想通过带选择器47的64位调用门转移到环0.如何使用intel语法在汇编中写入指令?
测试:
call far [mem]; wrong
call qword ptr [mem]; wrong
Run Code Online (Sandbox Code Playgroud)
记忆内容:
[mem + 0]: qword 0x00
[mem + 8]: word 47
Run Code Online (Sandbox Code Playgroud) 我在 virtualbox 中安装了最新的 Ubuntu 14.04 amd64(gcc 4.8.2),运行 cat /proc/cpuinfo,得到结果:

处理器 CORE i52520M 确实支持 AVX 指令。我使用了 Ubuntu 12.04 amd64(gcc 4.6),它通过 /proc/cpuinfo 支持 AVX。
如何在我的虚拟机软件中使用 AVX?
旧的linux版本使用"int 0x80"指令来实现系统调用,后来的版本使用"SYSENTER/SYSEXIT"指令来执行此操作.
通过"int 0x80"转移到环0后,cpu处于中断上下文中,禁止中断.但是"SYSENTER/SYSEXIT"不会产生"中断上下文",也不会禁用中断.
这种差异是否会导致系统调用出现问题?