首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在x86-64模式下,lahf何时可用?

在x86-64模式下,lahf何时可用?
EN

Stack Overflow用户
提问于 2020-09-20 19:22:20
回答 1查看 546关注 0票数 1

拉赫夫指令的描述如下:

此指令按上述兼容性模式和遗留模式执行。它只有在CPUID.800001H:ECX.LAHF-SAHFbit 0=1的64位模式下才有效。

第一个问题:兼容性和遗留模式是什么?它们与实模式和保护模式有何不同?

第二个问题:CPUID.80000001H:ECX.LAHF-SAHFbit 0= 1是什么意思?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-20 20:23:33

什么是兼容性和遗留模式。它们与实模式和保护模式有何不同?

80x86 CPU有多种模式。软件开发人员可能关心的是真实模式、保护模式和长模式,但也有系统管理模式(主要是“仅使用固件”)、“非活动”(等待启动)等。

保护模式有多个子模式(16位,32位,virtual8086).

长模式有多个子模式(16位,32位,64位).

“继承模式/s”指的是真实模式和保护模式(以及所有受保护模式的子模式),而不是长模式或其任何子模式;其中的代码要么是16位,要么是32位(实际模式和保护模式之间的其他区别对大多数指令都不重要,只关系到段寄存器加载和操作系统内核)。遗留模式/s的存在是为了向后兼容旧的软件/操作系统(例如,MS不支持长模式,将使用真实模式,Windows95不使用长模式和保护模式等)。

兼容模式/s是指长模式的16位和32位子模式.兼容性模式/s(或长模式的16位和32位子模式)的存在是为了允许较新的操作系统执行为旧操作系统设计的程序(例如允许64位版本的Windows运行为32位版本的Windows设计的应用程序)。在这种情况下,代码要么是16位的,要么是32位的(比如遗留模式);但是它与遗留模式不同,因为它仍然在使用长模式机制来分页、中断等等。对于兼容性模式,内核应该是64位,尽管当前执行的代码不是。

第二个问题: Second .80000001H:ECX.LAHF-SAHFbit 0=1是什么意思?

CPUID指令返回有关CPU的信息。因为有大量的信息,所以信息被分成组/“叶”,其中EAX中的值决定CPUID指令将返回哪些信息(在某些情况下,ECX还会修改返回的信息)。信息在通用寄存器(EAX、EBX、ECX、EDX)中返回。

"CPUID.80000001H:ECX.LAHF-SAHF[bit 0]“的意思是”当用EAX=0x80000001调用CPUID时,ECX的位0中的CPUID指令返回的值“( LAHF-SAHF部件就是LAHF-SAHF决定给该位指定的名称)。

换句话说,您的代码看起来可能类似于(Intel语法程序集):

代码语言:javascript
复制
    mov eax,0x80000001
    cpuid
    test ecx,1           ;Is bit 0 (the "LAHF-SAHF" bit) set?
    je .noLAHF           ; no, LAHF is not supported
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63982796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档