在英特尔文档手册中,我看到了00+
多个地方的引用,但没有定义.这个00+
指令/操作码是什么?
在英特尔文档"架构软件开发人员手册Vol 2A"中,表2-4显示了REX前缀位的重要性.
有人可以向我解释当W = 0时如何解释?它说,0 = Operand size determined by CS.D
但我不明白是什么CS.D
意思.
我只是看一下我在C中编写的一个简单exe的.text部分,我只想弄清楚一些x86操作码的结构.
从我一直在阅读的内容来看,似乎0xe9是相对跳转(JMP)的单字节操作码,但是我不确定其余的字节实际上是如何构成跳转地址的.
我正在使用超级在线反汇编程序ODA来反汇编我的程序,这就是显示的内容:
.text:0x00411005 e936210000 jmp 0x00413140
Run Code Online (Sandbox Code Playgroud)
因此0xe9是JMP指令,因为这是一个32位可执行文件,我假设接下来的四个字节将成为跳转的地址,但是我不确定它们是如何实际构造的.
如果有人能帮助他发光,我会很感激.
谢谢
鉴于 CPU 现在是多核的并且有自己的 L1/L2 缓存,我很好奇 L3 缓存是如何组织的,因为它由多个内核共享。我会想象,如果我们有 4 个内核,那么 L3 缓存将包含 4 个页面的数据,每个页面对应于特定内核引用的内存区域。假设我有点正确,就这样吗?例如,它可以将这些页面中的每一个划分为子页面。这样,当多个线程在同一个内核上运行时,每个线程都可以在其中一个子页面中找到它们的数据。我只是突然想到了这个,所以我非常有兴趣让自己了解幕后真正发生的事情。任何人都可以分享他们的见解或为我提供一个链接来治愈我的无知吗?
提前谢谢了。
我在 corei7 上的 ubuntu 上运行 gcc 版本 4.8.2。
从谷歌搜索中找到了有关 AVX 内在函数的信息,但我不确定这组内在函数是否可以用于 Linux 设备驱动程序并对其进行编译。
如果可以,这里的任何人都可以告诉我什么是 makefile 的正确设置以及在 c 源中包含哪些头文件以使用 gcc 编译这个 avx?
谢谢。
我根据主题有问题.
在xmm0寄存器中,我有一个值,例如-512.000000
和xmm4 : 0.000000
.
我尝试将第一个值与零进行比较,但我无法实现这一点.
comisd xmm0, xmm4
Run Code Online (Sandbox Code Playgroud)
COMISD
指令以奇怪的方式设置标志,并且只有jnz
在我的代码中正常工作之后.
我怎么做这个比较?
我尝试与SSE合作,但遇到了一些奇怪的行为。
我编写了简单的代码,用于将两个字符串与SSE Intrinsics进行比较,然后运行它并起作用。但是后来我明白了,在我的代码中,指针之一仍然没有对齐,但是我使用了_mm_load_si128
指令,它要求指针在16字节边界上对齐。
//Compare two different, not overlapping piece of memory
__attribute((target("avx"))) int is_equal(const void* src_1, const void* src_2, size_t size)
{
//Skip tail for right alignment of pointer [head_1]
const char* head_1 = (const char*)src_1;
const char* head_2 = (const char*)src_2;
size_t tail_n = 0;
while (((uintptr_t)head_1 % 16) != 0 && tail_n < size)
{
if (*head_1 != *head_2)
return 0;
head_1++, head_2++, tail_n++;
}
//Vectorized part: check equality of memory with SSE4.1 instructions
//src1 - …
Run Code Online (Sandbox Code Playgroud) 我正在使用Linux命令amttool
与本地网络上安装了AMT的另一台PC通信,以便独立于磁盘系统与机器通信以获取主板信息。我已经成功地通过Python 工具从机器获取基本功率数据,但没有提供更详细的信息。amttool
然而,Linux显示它可以根据手册页“打印一些机器信息”。
我希望能够提取的信息是 CPU 使用率、磁盘使用率、RAM 使用率等统计信息。 但是在命令行上运行:
AMT_PASSWORD=<amt_password> amttool <amt_host_ip> info
Run Code Online (Sandbox Code Playgroud)
总是返回这个错误:
### AMT info on machine <amt_host_ip> ###
AMT version: 9.0.30
404 Not Found at /usr/bin/amttool line 242.
Run Code Online (Sandbox Code Playgroud)
假设发生错误的行号根据命令而变化,在这种情况下,我们要求使用info
. 提供任何其他可能的命令会返回一个404
说明错误位置的不同行号。
我知道这不是身份验证问题,因为在将密码正确传递给amttool
我之前,我收到了401 unauthorized
错误消息。也因为将相同的凭据传递给上面链接的 Python amt 工具成功了。
可能的问题是什么?会不会是有bug的版本?主机端是否缺少设置?
任何帮助表示赞赏。
我正在分析一系列x86
指令,并对以下代码感到困惑:
135328495: sbb edx, edx
135328497: neg edx
135328499: test edx, edx
135328503: jz 0x810f31c
Run Code Online (Sandbox Code Playgroud)
我了解这sbb
相当于以des = des - (src + CF)
某种方式-CF
输入的第一条指令edx
。然后它negtive
-CF
变成CF
,test
是否CF
等于零?
但是请注意,不要jz
检查标志!那么上述代码序列基本上想做什么?这是合法的指令序列,由version 产生。ZF
CF
x86
g++
4.6.3
该C++
代码实际上来自botan项目。您可以在此处找到总体汇编代码(Botan RSA解密示例)。反汇编代码中有很多这样的指令序列。
由于Gameboy的处理器LR35902是Z80和Intel 8080的混合体,因此请记住,Z80和Intel 8080的设计基本上都是交叉兼容的,拥有Z80处理器的任何产品都可以运行是指LR35902?我想知道不是因为我希望使用TI84在自习室玩口袋妖怪。
编辑:我知道我将不得不重新编程控件,可能还需要重新编程游戏访问RAM的方式,但是我宁愿这样做,也不愿移植整个游戏。