instruction-set相关内容

32位IR如何保持加载指令?(RISC风格32位体系结构)

我对指令大小和可寻址空间感到有点困惑(我假设指令大小应该与地址位的大小相同。我没有在我的书中找到足够的解释)如果我是正确的,那么在理论上,如果我们在32位体系结构(RISC风格)中有2^32个可寻址单元(字节)的内存,那么4字节大小的加载指令如何保存操作码和地址? 推荐答案 您假设一条指令可以对来自任意绝对地址的加载进行编码。在x86上也是如此,即使在64位模式下也是如此(但有一个特殊 ..

CPU中的新指令集

每一代新CPU都会引入一些新的指令集,如MMX、3DNOW、SSE等。 我有几个关于它们的一般性问题: 如果某些程序使用例如SSE指令,它是否可以在不支持SSE的CPU上运行? 如果是,是否意味着这些指令将更改为更多更简单的指令? 如果没有,这是否意味着这些新指令的真正性能影响将在几年后,届时大多数CPU将支持这种技术(因此不会有任何不兼容)? 当我编译一个经过优化的C++程序时 ..
发布时间:2022-07-12 21:05:29 其他开发

MIPS向左加载字(LWL)和向右加载字(LWR)指令的作用是什么?

我最近一直在阅读MIPS指令集,突然发现了两条我在其他指令集中没有见过的不寻常的指令。 我环顾四周,想找出这些指令到底有什么作用的合理解释,但我所能做的就是它们以某种方式与未对齐的内存访问相关。 例如Wikipedia says: MIPS I要求所有内存访问都与其自然字边界对齐,否则会发出异常信号。为了支持高效的未对齐内存访问,存在以“Left”或“Right”为后缀的加载/存 ..

为什么ARM LSL和LSR的允许移位值范围不同?

为什么LSL[0,31]允许移位值,而LSR允许移位值是[1,32]? LSL中的0位移位对任何应用程序都有什么用处?为什么在LSR中不允许0班次?为什么LSL不允许32位移位? 推荐答案 此限制适用于按立即数进行的班次。按寄存器移位不受此类限制。 LSL允许为0表示“不换档”。这是一个特例,因为不修改标志设置指令的C标志。 LSR和ASR乘以0的行为与LSL乘以0的行为 ..
发布时间:2022-05-31 23:33:30 其他开发

计算机CPU中的寄存器

我只是想验证CPU本身是否支持“寄存器”名称。我是说阿格0阿格特2..。ETC在“名字”的末尾。CPU也支持名字吗?!我不是问寄存器本身,我是问CPU是否支持它可以操作的寄存器的名称? 推荐答案 名字是一种神奇的东西,而不是物理上的 这就是重点。名字纯粹是我们人类阅读的。CPU完全没有名称的概念。它们唯一处理的是数字。字符是数字,地址是数字,指令是数字……寄存器也是如此,它们也只 ..
发布时间:2022-04-08 14:39:17 其他开发

ARM:为什么立即数只有 12 位?

这是什么意思:我只有 12 位用于立即常数,所以我可以只表示从 0 到 2^12 = 4096 的立即常数吗?操作数 2 如果是寄存器,可以有 32 位,但为什么立即数只有 12 位呢?这个数字是从哪里来的? 解决方案 由指令集定义.例如.MOV 指令编码为 31 28 |27 26 |25 |24 23 22 21 20 |19 16 |15 12 |11 0 |条件 |0 0 |我 ..

ARM指令集中的缩写(Rn, Rd, ...)是什么意思?

最近我检查了 ARM Cortex-M3 处理器的指令集.例如: 添加 , , 这些缩写的确切含义是什么?我猜他们的意思是不同类型的地址,比如直接寻址、相对寻址等等.但究竟是什么? 谢谢! 解决方案 基础知识: Rd 是目的地,Rn 和 Rm 是来源.它们都是通用整数寄存器;FP 将使用 Sd/Sn/Sm 或 Dd/Dn/Dm 单人或双人. AR ..
发布时间:2022-01-17 13:48:30 其他开发

itte 在臂组件

下面这行代码在arm组装中做了什么: 000031e6​​ 2916 cmp r1, #22000031e8 bf1a itte ne 我得到了第一行(比较 r1 和 22)但是第二行呢(我以前从未见过 itte 命令,谷歌搜索什么也没返回) 解决方案 是ARM的IF-THEN-ELSE指令,在Thumb-2指令集中引入.(根据您上面的具体示例,如果您在 ITTE 指令之后显示了接下来 ..
发布时间:2022-01-17 13:46:22 其他开发

将数据与 ARM 中的指令区分开来

在(32 位)ARM Linux 内核中,如何区分嵌入在代码段中的数据和指令? 最好有一个轻量级的方法,比如位掩码,可以很容易地实现.将反编译器嵌入内核是不明智的. 解决方案 一般来说,你要求的是不可能的. 考虑一下这个函数,它碰巧使用了一个太大而无法编码为立即数的数据值: @ void patch_nop(void *code_addr);补丁号:ldr r1, =0xe1 ..
发布时间:2022-01-17 13:43:50 其他开发

ARM指令SWI和SVC完全一样吗?

ARM 程序集具有用于进入“主管模式"的 SWI 和 SVC 指令. 让我困惑的是,为什么会有两个?这里据说SVC以前是SWI.这是否意味着他们基本上改变了助记词?它们是一样的吗?我可以互换使用它们吗?其中一个存在于架构之前,而另一个存在于之后? 解决方案 是的,SWI 和 SVC 是一回事,只是换了个名字而已.以前,SVC 指令被称为 SWI,软件中断. SVC(和 SWI) ..
发布时间:2022-01-17 13:35:15 其他开发

无符号数和二进制补码有符号数的哪些算术运算相同?

我正在设计一个简单的玩具指令集和附带的模拟器,并且我正在尝试找出支持哪些指令.在算术方面,我目前有无符号加减乘除.但是,我似乎无法找到以下问题的明确答案:哪些算术运算符需要有符号版本,哪些是无符号和二进制补码有符号版本? 因此,例如,二进制补码中的 1111 等于 -1.如果你给它加 1 并假装它是一个无符号数,你会得到 0000,即使认为它是 -1 也是正确的.但是,这适用于所有数字吗?那 ..
发布时间:2022-01-09 19:03:01 其他开发

LEA EAX,[EAX] 有什么意义?

LEA EAX, [EAX] 我在用 Microsoft C 编译器编译的二进制文件中遇到了这条指令.它显然不能改变 EAX 的值.那为什么会在那里呢? 解决方案 这是一个NOP. 以下通常用作NOP.它们都做同样的事情,但它们导致不同长度的机器代码.根据对齐要求选择其中之一: xchg eax, eax = 90移动 eax, eax = 89 C0lea eax, [eax ..
发布时间:2022-01-06 13:10:42 其他开发

如何确定在 C 程序中执行的 x86 机器指令的数量?

我目前正在解决一个家庭作业问题,该问题要求我找出在运行我用 C 编写的短程序时执行的机器代码指令的数量. 这个问题说我可以使用任何我想弄清楚的工具,但我对 C 相当陌生,并且不知道如何去做. 我需要什么类型的工具来解决这个问题? 解决方案 术语:您要求的是动态指令计数.例如每次执行时计算循环内的指令.这通常与性能大致相关,但每个周期的指令可能会有很大差异. CPU 周期是 ..
发布时间:2022-01-06 12:29:48 其他开发

根据掩码合并位序列 a 和 b

根据bit twiddling hacks网站,操作 unsigned int a;//在非屏蔽位中合并的值无符号整数 b;//合并掩码位的值无符号整数掩码;//1 应选择 b 中的位;0 从哪里来.无符号整数 r;//(a & ~mask) 的结果 |(b & 面具) 在这里r = a ^ ((a ^ b) & 掩码); 允许根据掩码合并两个位序列a和b.我想知道: 此操作是否有特定/ ..
发布时间:2021-12-27 22:17:08 C/C++开发

为什么 RISC-V S-B 和 U-J 指令类型以这种方式编码?

我正在阅读一本书“计算机组织与设计 RISC-V 版",我遇到了 S-B 和 U-J 指令类型的编码. 我上面提到的那些类型有奇怪的编码立即字段. S-B 类型将立即数字段分成 2 部分.这是有道理的,因为所有指令编码都必须相似.但我不明白为什么下面的直接字段以这种方式编码. imm[12, 10:5], imm[4:1, 11] 代替 imm[11:5], imm[4:0] ..
发布时间:2021-12-27 15:44:47 其他开发

orpd等SSE2指令的意义何在?

orpd 指令是“压缩双精度浮点值的按位逻辑或".这不是与 por(“按位逻辑或")完全相同的事情吗?如果是这样,拥有它有什么意义? 解决方案 记住 SSE1 orps 先到先得.(实际上 MMX por mm, mm/mem 甚至更早出现SSE1.) 具有相同操作码和新前缀的是 SSE2 orpd 指令对硬件解码器逻辑很有意义,我想,就像 movapd 与 movaps 一样.在 ..
发布时间:2021-12-18 09:35:09 其他开发

为什么 IA32 不允许内存到内存 mov?

在英特尔架构 IA32 中,像 movl、movw 这样的指令不允许操作数同时是内存位置.例如,不允许使用指令 movl (%eax), (%edx).为什么? 解决方案 答案涉及更全面地了解 RAM.简单地说,RAM只能处于两种状态,读模式或写模式.如果您希望将 ram 中的一个字节复制到另一个位置,当您从读取切换到写入时,您必须在 RAM 之外有一个临时存储区域. 架构当然有可能 ..
发布时间:2021-12-18 09:28:35 其他开发

pushl/popl %esp 的汇编级表示是什么?

我试图了解推入和弹出堆栈指针寄存器的行为.在 AT&T 中: pushl %esp 和 popl %esp 请注意,它们将计算出的值存储回 %esp. 我正在独立考虑这些说明,而不是按顺序考虑.我知道存储在 %esp 中的值始终是递增/递减之前的值,但是我如何用汇编语言表示行为?这是我目前想到的. 对于pushl %esp(忽略FLAGS和对临时寄存器的影响): movl % ..
发布时间:2021-12-18 09:10:20 其他开发

CS:APP 示例使用带有两个操作数的 idivq?

我正在通过“计算机系统从程序员的角度"(第 3 版)一书阅读有关 x86-64(以及一般的汇编)的信息.根据网络上的其他来源,作者指出 idivq 只接受一个操作数 - 就像 this 声称.但是,作者在几章之后给出了一个示例,指令为 idivq $9, %rcx. 两个操作数?我一开始以为这是一个错误,但从那里开始在书中发生了很多. 此外,应根据寄存器 %rdx(高 64 位)和 % ..
发布时间:2021-12-18 08:58:48 其他开发