相关疑难解决方法(0)

在 x64 中完全不使用分段吗?

在 x86 中,当您想要访问内存地址时,您将指定一个地址,该地址将通过两个阶段转换为内存地址:分段分页

在此处输入图片说明

但是在 x64 中也使用分段吗?(我认为它没有被使用,但我不确定它是不是在所有情况下都使用,或者在某些情况下使用它)。

x86 operating-system x86-64 memory-segmentation

4
推荐指数
1
解决办法
1160
查看次数

为什么在 64 位模式下使用“DS:”段覆盖是非法的?

我有几行非常简单的汇编代码,可以移动一些数据,如下所示:

mov rax,qword ptr gs:[60]                         
mov rcx,qword ptr ds:[rax+20]                                         
mov rax,qword ptr gs:[60]                         
mov rcx,qword ptr ds:[rax+20]                     
mov rbx,qword ptr ds:[rcx+28] 
Run Code Online (Sandbox Code Playgroud)

但是,编译器返回

错误 A2202:非法使用段寄存器

我有一种感觉,这可能是我的编译器或版本的问题,任何指针都会有所帮助

assembly x86-64 masm

2
推荐指数
1
解决办法
1354
查看次数

分段寄存器的mov是否比通用寄存器的mov慢?

具体是:

mov %eax, %ds
Run Code Online (Sandbox Code Playgroud)

慢于

mov %eax, %ebx
Run Code Online (Sandbox Code Playgroud)

或者他们是相同的速度.我在网上研究过,但一直无法找到明确的答案.

我不确定这是否是一个愚蠢的问题,但我认为修改分段寄存器可以使处理器做额外的工作.

NB我关注旧的x86 linux cpus,而不是现代的x86_64 cpus,其中分段的工作方式不同.

x86 assembly intel cpu-cycles mov

2
推荐指数
1
解决办法
99
查看次数