问题标签 [instruction-set]
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.
assembly - 汇编器指令 bne 和 br (NIOS II)。他们的偏移量是如何计算的?
我有这个汇编代码,我应该将其翻译成二进制形式的机器代码:
而且我不确定如何解释“bne r16,r0,loop”和“br stop”。
我的指令集参考说 bne 指令这样做:
据我了解,程序计数器增加了 4 + offset 或简单地增加了 4。
但是,就我而言,偏移量/IMM16 值是多少?指令集参考说:
“在指令编码中,IMM16 给出的偏移量被视为相对于紧跟 bne 的指令的有符号字节数”。
我对此的解释是,IMM16 值是到下一条指令地址的“距离”,但我不知道这是否正确。bne 的十六进制地址是 0x40010 和 br 的 0x40014,所以这意味着 IMM16 的值是 4?(如果 rA != rB 会导致 PC 跳过 0x40014 地址?)
comparison - 注册以注册比较
我研究了 CPU 的组成部分以及随机存取存储器的结构,但我不了解寄存器到寄存器的比较操作。
“为什么寄存器到寄存器的比较操作通常比对 RAM 中两个数据条目的等效操作更快?”
assembly - AMD64机器码“48 ff 25”是什么意思?
谁能告诉我以下反汇编代码中的“0x48ff25”是什么意思?
我查了AMD64架构程序员手册,但是自己真的很难找到答案……
graphics - 模拟一个简单的图形卡
好的。我可以找到简单架构的模拟设计。(编辑:绝对不像 x86)
例如使用 aint
作为程序计数器,使用 abyte array
作为内存等等。
但是我怎样才能模拟显卡的(可以想象的最简单的显卡)功能呢?
就像使用 anarray
来表示每个像素并一个一个地“绘制”每个像素。
但何时绘制与 CPU 同步或异步?谁存储graphic data
在该数组中?是否有存储像素和绘制像素的指令?
请考虑所有问号('?')并不意味着“你问了很多问题”,而是解释了问题本身 - 如何模拟显卡?
编辑: 链接到 CPU+内存模拟的基本实现设计
architecture - 叶指令(处理器/组件)
我不确定 SO 是否是提出这个问题的最佳场所。如果没有,请告诉我应该去哪个姐妹网站。
我一直在阅读有关英特尔可信执行技术 (TXT) 的论文,其中包含我似乎无法理解的以下文字:
“英特尔创建了一个名为 GETSEC 的新‘叶’指令,可对其进行定制以调用各种叶操作(包括 SENTER)”
我找不到任何关于叶子指令的信息。它们是什么以及为什么/何时使用它们?有什么提示吗?
ps 论文被 McCune 等人称为“你能走多低?推荐硬件支持的最小 TCB 代码执行”。
c++ - 如何编写编译器后端以从 C 代码为用户定义的硬件架构生成程序集
我正在做一个项目,我必须定义一个新的处理器硬件架构。我需要一个编译器来为这个目标生成汇编代码(它有自己的指令集)。
该处理器的程序将用 C 语言编写。
我的想法是解析 C 代码并生成抽象语法树 (AST),然后从 AST 生成程序集。
当然我想重用现有的组件(我希望不需要重写 C 解析器),但是我可以使用哪些工具或框架来完成这项任务?
谢谢。
x86 - 反汇编“faddl”指令
在我为 x86 平台上的 32 位 Linux 编写反汇编程序的冒险中,我遇到了一个问题。当我使用以下命令反汇编一个简单的 ELF-32 可执行文件时,我看到了以下操作码序列objdump
:
但是当我查看英特尔手册时,我没有看到与此相对应的操作码。该fadd
指令以 0xDC 开头,但随后需要一个m64fp
操作数,即“内存中的内存四字操作数”。
现在,这是否意味着操作数是一个 64 位地址(这意味着该fadd
指令是一个 64 位指令,但没有以 REX 字节为前缀),或者它只是一个指向的 32 位地址到四字(64 位)?
我是否在这里遗漏了一些琐碎的事情,或者我对编码 x86 指令的理解是错误的?
x86 - x86 中的重复前缀和强制前缀
在我为特定于 x86 架构的 linux 编写一个小型反汇编程序的过程中,我遇到了一个小问题。它与强制性前缀和重复前缀有关。查看英特尔文档 [1],据说重复前缀是0xf2或0xf3,强制前缀是0x66、0xf2或0xf3。
有两条指令具有以下基本操作码:
crc32 -- f2 0f 38 f0 (这里,0xf2 是强制前缀)
movbe -- 0f 38 f0
因此,只要计数器寄存器非零就必须重复的“movbe”指令的操作码应该是:
repnz movbe == f2 0f 38 f0
当我开始反汇编指令时,如果我看到字节0xf2,我怎么知道它是crc32指令的强制前缀,而不是movbe指令的重复前缀,反之亦然?我将操作码模式“f2 0f 38 f0”匹配到哪条指令?
我错过了什么?
[1] http://www.intel.com/design/intarch/manuals/243191.HTM
谢谢和问候,
Hrishikesh Murali
x86-64 - x86 浮点和整数指令类型之间的实际区别是什么?
微处理器指令有两种基本类型:整数和浮点。
因此,它们在整数处理单元和浮点处理单元上执行。这是有道理的,对吧?
但是是什么告诉处理器向 IPU 或 FPU 发送指令?它怎么知道哪条指令是哪一种?
也许一条指令有一个位/标志/LUT或一些可以区分彼此的东西?
assembly - 如何在 ARM 上进行整数(有符号或无符号)除法?
我正在研究 Cortex-A8 和 Cortex-A9。我知道有些架构没有整数除法,但是除了转换为浮点数、除法、转换为整数之外,最好的方法是什么?或者这确实是最好的解决方案?
干杯! = )