问题标签 [machine-instruction]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
llvm - 如何在 LLVM 中将 MachineInstr 转换为 MCInst?
我希望MachineInstr
在MCInst
.MachineFunctionPass
我知道X86MCInstLower
将转换MachineInstr
为MCInst
. 但是,初始化X86MCInstLower
需要一个X86AsmPrinter
. X86AsmPrinter
本身MachineFunctionPass
就是需要TargetMachine &
和std::unique_ptr<MCStreamer>
被启动的。我不能TargetMachine
从 a中得到,MachineFunction
因为MachineFunction
只有返回const TargetMachine &
。构造TargetMachine
函数也没有任何来自const TargetMachine
.
因此,我被困在这个转换点上。有什么方法可以运行注册通行证并从 a 中获取其输出MachineFunctionPass
?X86AsmPrinter
注册TargetRegistry
于RegisterAsmPrinter
。我想知道我们是否可以利用它。
有一个关于此的邮件列表线程。然而,这并没有最终解决问题。
pipeline - 5 级数据路径 - 多周期无流水线
我有一个具有以下步骤时间的 5 阶段数据路径:
它被要求计算在 1us 内可以执行多少条指令,因为它知道处理器在没有流水线的多周期中工作并且时钟已优化。
我知道,如果处理器是流水线的并且流水线最初是空的,那么通过执行以下操作,指令数将为 4996:
由于在这种情况下没有管道,我所做的是:
然而,正确的答案是 1000 条指令。有人可以解释我为什么吗?
谢谢
c++ - C++ 可以在全局范围内有代码吗?
有代码(在 C++ 源文件的全局范围内编译为汇编指令)是否合法?以前,我的印象是除了Ch 编程语言(C/C++ 的解释器)之外,你不能有代码C++ 程序的全局范围。代码/指令只能在函数体内 [句号]!
但是,我发现您可以通过将函数分配给全局变量来调用 C++ 中的 main 函数之前的函数!这将涉及call
汇编代码中的指令。您还可以将两个变量的总和分配给汇编代码之外的另一个全局变量。这几乎肯定会涉及到add
和mov
指令。如果该代码在全局范围内,在任何函数之外,它什么时候执行?如果+
是一个类类型的重载运算符,如果它里面有一个 print 语句,它什么时候执行?
您还可以在 C++ 程序的全局范围内拥有循环和控制结构,如果是,它们何时执行?对于其他程序构造,它们是否允许在全局范围内,在什么情况下以及何时执行?
这个问题是对我之前发布的问题的回应: 为什么我不能在 C 中的函数之外为全局变量赋值?
原始问题的回答者断言您不能拥有超出函数范围的代码。我认为我不完全理解这方面的规则,以及究竟什么被认为是“代码”。
c - 从(汇编)指令序列到 C 代码的映射
我的教科书中有一个练习:
显示了参数 a 和 b 之间的一般比较,其中我们可以通过使用 typedef 声明声明 data_t 来设置参数的数据类型,我们可以通过使用 #define 声明定义 COMP 来设置比较。假设 a 在 %edx 中,b 在 %eax 中。对于以下每个指令序列,确定哪些数据类型 data_t (可能有多个正确答案;您应该将它们全部列出。)
教科书上的答案是:
后缀“l”和寄存器标识符表示 32 位操作数,而比较是针对二进制补码“<”。我们可以推断出 data_t 必须是 int。
所以我的问题是:既然它要求列出所有可能的答案,为什么 data_t 也不能是 'long int' 和也是 32 位的指针?
assembly - X86 中的绝对远跳转操作数是什么
执行绝对 Far Jmp 的操作数是什么?
我认为它应该如下所示:
EA XX XX XX XX
我尝试使 XX XX XX XX 成为我想跳转到的 4 字节地址,但它没有按预期工作。
assembly - 如何将内存地址转换为代码段地址?
如何将地址转换为 16 位代码段(CS 寄存器)?例如,如果 .text 段从 00E51000 开始,如何计算该段的 CS 寄存器?这个问题特定于 32 位 x86 架构。
mips - 下面的 I-Type 指令如何改变程序计数器?
考虑这条 I 型指令(BNE,不等于分支):0001 0100 1010 1001 1111 1111 1110 1111。当满足 NE 条件时,PC 值的变化是什么,即 PC = PC + _____?
问题的答案是-68,但我不完全确定为什么。我知道对于 I-Type 指令,最后 16 位是偏移量,源目标和分支位置之间的有符号差异。所以所有的1都表示负值?但是,我仍然不明白值 68 是如何得出的。
llvm - 从分支指令中提取 MachineBasicBlock
分支指令包含标签,这些标签是它可能跳转到的基本块的名称。鉴于此,有没有办法从分支指令中提取 MachineBasicBlock 对象?例如:
instruction-set - 内存中每个物理地址可以存储多少个值?
我读过你在 Ram 中每个物理地址只能存储一个值。现在这个数据可以是指令或数据。这是因为当 CPU 从 Ram 读取一个 Word 时,它一次只能处理一个值?无论是指令、整数还是字符串。是否有技术原因您不能为每个索引拟合多个值。我读过有关标量处理器的信息,但它们不是很老。例如,您不能在 64 位字的宽度中容纳两个或更多值吗?或者我在这里错过了一些非常明显的东西。我想我在问这是一个编程概念,还是有实际的技术/硬件原因,cpu 每次从 Ram 读取一个 Word 时不能处理一个以上的值。
谢谢
抢