instructions相关内容
我真的很困惑,这个问题可能听起来很愚蠢,但当我们说指令大小是 32 位或 16 位时,我真的不确定这意味着什么. 如果操作数大小是 32 位,那么我们说它是 32 位指令,如果操作数大小是 16 位指令. 或者每条指令都有操作码,如果操作码地址是 32 位,那么我们说指令是 32 位. 我也在研究 ARM 架构,在那里我读到的所有拇指指令都是 16 位的,但 ARM 模式指令是
..
最近我检查了 ARM Cortex-M3 处理器的指令集.例如: ADD 、、 这些缩写到底是什么意思?我猜他们的意思是不同类型的地址,比如直接寻址、相对寻址等等.但究竟是什么? 谢谢! 解决方案 基础: Rd 是目的地,Rn 和 Rm 是来源.它们都是通用的整数寄存器;FP 将使用 Sd/Sn/Sm 或 Dd/Dn/Dm 单人或双人. ARM 语法将目标放在左侧,在只读
..
ADRP 相对于 PC 偏移的 4KB 页地址. ADRL 将与 PC 相关的地址加载到寄存器中.它类似于 ADR操作说明.ADRL 可以加载比 ADR 更广泛的地址范围,因为它生成两个数据处理指令. 具体来说, ADRL 汇编为两条指令,一条 ADRP 后跟 ADD.如果汇编器不能用两条指令构造地址,它产生重定位.然后链接器生成正确的偏移量.ADRL 产生与位置无关
..
我刚刚开始学习微控制器,我无法理解如何在不使用计时器的情况下在代码中引入延迟.我的主板有一个 16MHZ 的时钟.假设我想在检查按钮是否被按下之前引入 5ms 延迟.我如何确定需要执行多少条指令才能获得 5 毫秒的延迟,以及我将如何对其进行编程?有没有标准化的方法来做到这一点?这看起来是一件很标准的事情,但我无法理解它是如何完成的. 我正在 Atmega 328 Arduino uno 上使
..
在指令编码中默认大小为: 操作数大小为 32 位地址大小为 64 位 我们可以使用旧前缀: 0x66 – 操作数大小覆盖前缀 使操作数大小为 16.如果我想使其为 8 位而不是 16 位怎么办? 解决方案 如果我想把它变成 8 位而不是 16 位怎么办? 你不能用前缀来做到这一点.支持 8 位操作数大小的指令使用完全独立的操作码,而不是覆盖前缀. 例如: 0:
..
我一直在尝试理解 GCC 生成的汇编语言代码,并且在包括 _start() 在内的许多函数的开头经常遇到此指令,但找不到任何说明其用途的指南: 31-0000000000001040 :32:1040:f3 0f 1e fa endbr6433- 1044: 31 ed xor ebp,ebp 解决方案 endbr64(和 endbr32)是 英特尔的控制流强制技术 (CET
..
我编写了一个简单的 32 位汇编代码: movl $0x542412e6, %eaxmovl %ebp , %edxaddl $0x30, %edxmovl %edx, %ebppushl 0x08048dd6回复 当我运行这个命令时: gcc -m32 -c e.s 我得到以下 18 个字节: 0: b8 e6 12 24 54 mov $0x542412e6,%eax5: 89 ea
..
它们是最简单的“说明"之一.您可以在计算机上执行(它们是我亲自实施的第一个) 执行 NOT(AND(x, y)) 使执行时间和依赖链长度和代码大小加倍 BMI1 引入了“andnot"这是一个有意义的添加,是一个独特的操作 - 为什么不是这个问题标题中的那些? 您通常会在“它们占用宝贵的操作码空间"这几行中阅读答案.但随后我查看了 AVX512 引入的所有 kmask 操作,顺便说一下,其中
..
一条指令是否可以位于多个页面上,例如......指令的一半(组成该指令的一些字节)位于页面 A 上,其余位于页面 B 上? 解决方案 答案是肯定的,同一条指令的部分可以位于两个相邻的内存页中.
..
机器指令和微操作有什么区别?我在此处找到了以下定义: 一个小的、基本的指令,串联使用组成一个高级别的指令机器指令 这是我在维基百科 上找到的内容 在计算机中央处理器中,微操作(也称为micro-ops 或 μops)是一些详细的低级指令设计来实现复杂的机器指令(有时称为此上下文中的宏指令) 我是否正确理解微操作是在给定周期内执行的处理器指令.说喜欢和 ADD、SUB、MUL、
..
所以,我一直在尝试学习一些汇编,我看到了一个加法的例子,但我真的不明白一件事: section .text全局_start_开始:移动 eax, '3'子 eax, '0'mov ebx, '4'子 ebx, '0'添加 eax, ebx添加 eax, '0'mov [sum], eaxmov ecx, msgmov edx, lenmov ebx, 1移动轴,4整数 0x80mov ecx,
..
我有很长的字节数组,需要将它们添加到 short(或 int)类型的目标数组中.这样的SSE指令存在吗?或者他们的套餐? 解决方案 您需要将每个 8 位值的向量解包为两个 16 位值的向量,然后将它们相加. __m128i v = _mm_set_epi8(15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0);__m128i vl =
..
ret 指令 是否会导致“esp"?注册要增加 4 个? 解决方案 是的,它执行 pop eip 你可以使用 mov eax, [esp]jmp eax 避免它. 编辑:这正是 ret 所做的.例如,jmp rel_offet 只不过是一个隐藏的 add eip, offset,或者 jmp absolute_offset 是 mov eip, absolute_offset
..
我想在我的代码中计算几个 cpu 指令.例如我想知道我的代码执行了多少加法、多少乘法、多少浮点运算、多少分支.我目前在 Linux 下使用 gprof 来分析我的 c++ 代码,但它只给出了对我的函数的调用次数,我手动估计了指令的数量.有什么工具可以帮我解决问题吗?也许是一些虚拟机? 解决方案 您可以使用 Valgrind's Callgrind 和 --dump-instr=yes标志来
..
是否有获取当前时间的 x86 指令? 基本上......类似于clock_get_time的替代品......具有最小开销的东西......我并不真正关心以任何特定格式获取时间......只要它是我可以的格式使用. 基本上我正在做一些工作来“检测多少物理现实生活时间"已经过去了......我希望能够尽可能频繁地测量时间! 我猜你可以想象我正在做一些类似分析应用程序的事情.....
..
我知道 MIPS 中的 la 分解为 lui 和 ori 但这些指令的参数是什么? 我在这里查看了这个问题 MIPS 伪指令,替换但结果lui 总是使用 4097? 考虑以下事项: .data_a: .space 4.文本主要: la $s0,_a 翻译成这个了吗? lui $at,4097原 $s0,$at,0 谢谢! 解决方案 4097 十进制是 0x1001.这
..
动态指令数和静态指令数有什么区别? 一个.导出一个表达式来计算用户 CPU 时间作为函数以下参数:动态指令数(N),每条指令的时钟周期 (CPI) 和时钟频率 (f) B.解释在问题 3a 中选择“动态"指令计数作为参数的原因而不是“静态"指令计数 解决方案 动态指令数是 CPU 为特定程序执行实际执行的指令数,而静态指令数是程序拥有的指令数. 我们通常使用动态指令计数,
..
这个问题不是关于优化代码的问题,而是一个关于短路逻辑运算符和普通逻辑运算符的性能差异的技术性问题,这些差异可能归结于它们在硬件级别上的执行方式. 基本逻辑 AND 和 OR 占用一个周期,而短路评估则使用分支,并可能占用各种周期.现在我知道分支预测变量可以使此评估高效,但是我不知道它的循环速度如何快于1个周期? 是的,如果正确的操作数是昂贵的东西,那么尝试不进行评估是有益的.但对于诸如
..
我正在做一些关于功能安全性的事情.我需要验证一些X86 CPU指令,例如LFENCE,SFENCE和MFENCE. 现在,根据英特尔SDM第8.2.3.4节“可以通过较早的存储将负载重新排序到其他位置,"我可以体验MFENCE. "xor%0,%0 \ n \ t"“电影$ 1,%1 \ n \ t""mfence \ n \ t"“%2,%0 \ n \ t":"= r"(r1),"=
..
我想知道为什么x86体系结构上的指令 FYL2XP1 能够精确计算数学公式 y ·log 2 ( x +1). 此公式有什么特别之处? 解决方案 y 操作数通常是一个编译时间常数,此刻请忽略 x +1 . 由于 log_b(x)= log_b(2)* log_2(x),因此该指令允许以 x + 1 的任何底数计算对数. 请注意, log_b(2)是一个常数,因为它几乎不需要以
..