问题标签 [relative-addressing]
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.
perl - perl 中的相对寻址,使用 open dir
我有以下代码用于列出目录中的所有文件,路径寻址有问题,我的目录是* /tmp/ *,基本上我想要tmp目录中目录中的文件。但我不允许使用 * ,你有什么想法吗?
assembly - 两遍汇编器如何处理由汇编器扩展的指令?
考虑以下 MIPS 程序集(我正在使用 MIPS,因为这是我的计算机组织和设计书使用的):
因为 MIPS 只使用 16 位作为beq
指令中的 PC 相对地址,如果L1
离 足够远beq
,汇编器必须用两条指令(一个跳转有 26 位地址)和一个新标签来替换它:
如果这还不够,它可能需要多次跳转。
汇编器在知道L1
. 由于它最初不知道beq
(1 条指令或 2 条指令)的大小,它如何在第一次通过时使位置计数器保持最新?
android - Android 应用程序本机部分中的相对寻址
我在 Android 应用程序的本机部分创建了一个对象,如下所示:
在纯 c++ 中,您将haarcascade_frontalface_alt2.xml放在haarcascades文件夹中,除了您的源代码。但是现在我真的很困惑它应该放在哪里?在 jni/haarcascades 目录中?或者别的地方?
提前致谢。
c++ - 无法读取文件并放置在 CUDA 中的二维相对矩阵地址中
我正在使用 malloc 分配一个二维矩阵并尝试在相对地址中插入值。我不明白为什么它是核心转储错误。请看我下面的代码。
我已经制作了上面的示例程序来检查相对地址并将 &x[] 放在 fscanf 中清除了这个问题。
上面的示例 C 代码是由于 Cuda 中的相同读取问题而完成的。当使用相同的二维数组及其相对地址的分配方式时,它正在读取文件,并且在尝试打印相同的文件时..它打印 0 而不是 1,2,3,4.. 我处于 CUDA 的学习阶段. 我看到主机数组没有分配问题并放置在其相对地址中,但是为什么读取的文件打印的是 0?
Cuda程序如下
assembly - 为什么ARM PC寄存器指向下一条要执行的指令之后?
根据ARM IC。
在 ARM 状态下,PC 的值是当前指令的地址加上 8 个字节。
在拇指状态:
- 对于 B、BL、CBNZ 和 CBZ 指令,PC 的值是当前指令的地址加上 4 个字节。
- 对于所有其他使用标签的指令,PC 的值是当前指令的地址加上 4 个字节,结果的 bit[1] 清零以使其字对齐。
简单地说,PC寄存器的值指向下一条指令之后的指令。这是我不明白的。通常(特别是在 x86 上)程序计数器寄存器用于指向要执行的下一条指令的地址。
那么,这背后的前提是什么?条件执行,可能吗?
assembly - ARM指令到十六进制负载,如pc相对LDR
我一直在尝试将 arm 指令转换为包括 PC 寄存器的十六进制,例如
我查了《ARM架构参考手册》,LDR指令的描述如下:
问题出现了, 1. cond 值,见指令格式,LDR 指令对应的cond 值是0101(PLUS) 还是?2、Rd为PC寄存器,如何用四位来描述PC[15:12]
assembly - “mov offset(%rip), %rax”是做什么的?
rax
得到偏移量加上这条指令的地址,还是下一条?从微码的角度来看,如果答案是下一条指令,可能会更容易。
c - 有没有一种方法可以在 C 中本地化文字池,如程序集中的“ltorg”?
我正在实现一个 C 函数,它将在运行时复制到另一个内存位置。
我避免在其中调用函数,只在其中使用纯常量。当我检查汇编输出时,常量访问被转换为 PC 相对寻址指令。然而,相对地址(文字池)在函数之外。(看起来它们是在随机的地方生成的)。
我知道在 ARM 程序集中有一个.ltorg
指令可以本地化这些文字池,C 中是否有方法可以做同样的事情?
java - 编译器生成的相对地址以及它们如何在(最好是 java)字节码中表示?
如果在编译时无法进行地址绑定,则在加载/链接或运行时完成,将相对(或者我们可以称它们为可重定位地址)地址与实际物理地址相关联。此外,CPU 还会在绑定物理地址之前将这些相对地址转换为逻辑地址。
从逻辑到物理的转换对我来说是一个已知的概念。但是,我对那些相对寻址感到困惑(AFAIK,他们称之为相对,因为它们是由编译器相对于零给出/分配的)。我不确定(在字节码中)使用什么相对地址,或者它们是否真的需要,或者它们甚至与逻辑地址相同?
assembly - 类汇编语言编译器上的 PC 相对寻址
我目前正在为一种自定义的类似 asm 的编程语言编写编译器,我真的很困惑如何为数据标签进行正确的 PC 相关寻址。
上面的伪代码在编译后会产生以下十六进制:
3180
,F020
和F00C
是LDA
,IPT
和HLT
指令。
从代码中可以看出,该LDA
指令使用标签hello
作为参数。编译后,它变成 value 02
,这意味着“Incremented PC + 0x02”(如果您查看代码,那是“Hello, world!”行的位置,相对于LDA
调用。事情是:.STR
不是指令,因为它只告诉编译器它需要在可执行文件的末尾添加一个(0 终止的)字符串,因此,在hello
标签声明之后是否还有其他指令,该偏移量将是错误的。
但是除了让编译器能够穿越时间之外,我找不到计算正确偏移量的方法。我必须“编译”两次吗?首先是数据标签,然后是实际指令?