instructions相关内容
我看到了汇编代码, MOV [EAX],EBX 以上一行,它们被提及为 [EAX] 是内存,而 EBX 是Register.因此,这是 [EAX] 和 EBX 之间的区别.以上说明会发生什么. 解决方案 在这种语法中,寄存器周围的括号表示使用内存位置(根据指令,作为源或目的地),并在寄存器中指定了起始地址(您的情况下EAX).例如,如果EAX在指令之前包含1344,则将EBX中
..
执行以汇编语言编写的程序时,计算CPU执行的指令总数的最快方法是什么?对于小型程序,可以手动执行此操作,但是对于大型程序?我使用Mars4在汇编中编写. 解决方案 单击工具-> 指令计数器-> 连接到MIPS .然后运行您的程序.
..
在x86体系结构中的函数调用期间,是否存在返回地址没有被压入堆栈的情况? 解决方案 否.根据定义, CALL 将把返回地址压入堆栈,然后再跳转到目标地址.该返回地址为 EIP (或 RIP )+ sizeof(调用指令)(通常为5个字节). 远程调用-“对位于与当前代码段不同的段中的过程的调用",其中CS,EIP被压入堆栈. 另一种方法是不发送回信地址,而是一种 JMP .
..
我目前正在尝试使用汇编来加快Cortex-M0(Freescale KL25Z)上的某些C函数的速度.我对这个最小的测试程序有疑问: @.syntax统一.cpu皮质-m0.文本.global测试.code 16测试:mov r0,#0加r0,r0,#1bx lr 当我尝试将.s文件汇编为.o文件时,出现此错误 $ arm-none-eabi-as test.s -o test.ote
..
我真的很困惑,可能听起来有些愚蠢,但是我真的不确定当我们说指令大小为32位或指令为16位时是什么意思. 如果opreand的大小是32位,那么就说它是32位指令,如果操作数是16位的指令. 或者每条指令都有操作码,如果操作码地址是32位,那么我们说指令是32位. 我还将经历ARM架构,在该架构中,我读取的所有Thumb指令均为16位,而ARM模式指令为32位. 指令大小完全
..
可执行文件如何在AMD和Intel系统上都能工作. AMD和Intel的指令集是否有所不同?可执行文件如何在两者上工作?他们如何精确地编译文件以使其工作.操作系统在这一切中的作用到底是什么? 解决方案 这些天来,基本上是针对OS而不是针对硬件进行编译,因为大多数硬件具有x86或x64机器,如上所述,具有通用协议和/或技术.代码/操作码/指令集,某些程序员确实制作了旨在在某些硬件上更好运行的
..
此语句: reg [7:0] register_file [3:0] = 0; 产生此错误: 错误(10673):simpleprocessor.v处出现SystemVerilog错误。v(27):对解压缩数组的赋值必须是聚合表达式 首先,我使用的是Verilog,而不是SystemVerilog,为什么会给我一个SystemVerilog错误?
..
我认为,由于英特尔微处理器的内存是按字节组织的,而指令队列的大小是4个字节,答案将是4条指令? 解决方案 8086和8088芯片具有预取队列。这些存储了从指令指针(和代码段)“向前”的内存中预取的多个字节。这样,处理器就可以在空闲的总线周期中做一些“有用的事情”。 8088预取队列的深度为四个字节。 8086队列的深度为6个字节。 同样,这些不对应于一定数量的指令,而是一定数量
..
我研究了一些有关处理器进行指令重排序和Tomasulo算法的事情。 为了更深入地理解这一主题,我想知道是否存在有什么方法(获取跟踪信息)来查看给定程序的实际动态重新排序? 我想提供一个输入程序并查看“乱序指令”执行跟踪”。 我可以使用IBM-P7机器和Intel Core2Duo笔记本电脑。还请告诉我是否有一种简单的选择。 解决方案 您无权访问CPU内部进行的实际重新排序
..
我想知道当前cpus是否避免在两个数字中至少有一个为零的情况下将它们相乘。谢谢 解决方案 具体取决于CPU和(在某些情况下)操作数的类型。 p> 较旧/较简单的CPU通常使用以下乘法算法: 整数运算符*(整数const& other){ unsigned temp1 = other.value; unsigned temp2 =值; 无符号答案= 0; 而(tem
..
与组装最接近的是构建自己的Java类库,该库加载类文件,并允许您创建,编译和反编译类。在致力于该项目的同时,我想知道Java虚拟机如何在JIT优化过程中在运行时实际生成本机代码。 让我思考:如何生成机器代码并 解决方案 您的问题发生了重大变化(2017年7月)。初始变体指的是 EX(执行)指令 一个人如何生成机器代码并在运行时通过汇编将其执行...? 在实践中,您将使用一
..
特定于类型的Java字节码指令具有单字符前缀以指定该指令所涉及的类型。 来自 Wikipedia在Java字节码上的条目 在每种情况下,前缀选择都是有意义的,由类型的第一个字母组成(布尔值除外,布尔值没有指令前缀)。但是,对象引用前缀似乎不合逻辑,因为它们同时显示为 o 和 r (两个第一字母) ) 免费的。相反,对象引用指令使用 a 作为其前缀。 为什么对象引用字节码指令的前缀
..
我正在设计一个简单的玩具指令集和随附的仿真器,并且试图找出要支持的指令.以算术的方式,我目前有无符号的加,减,乘和除.但是,对于以下问题,我似乎找不到一个明确的答案:哪些算术运算符需要带符号的版本,哪些无符号和二进制补码的版本等效? 因此,例如,二进制补码中的1111等于-1.如果向其添加1并假装它是一个无符号数字,则会得到0000,即使将其视为-1也是正确的.但是,这是否适用于所有数字?那
..
是否可以通过编程方式从x86架构上的二进制可执行文件中读取给定数量的指令? 如果我有一个简单的C程序的二进制文件hello.c: #include int main(){ printf("Hello world\n"); return 0; } 使用gcc进行编译后,反汇编的函数main如下所示: 000000000000063a
..
我正在做CSAPP的数据实验室,即isGreater函数. 这是说明 isGreater - if x > y then return 1, else return 0 Example: isGreater(4,5) = 0, isGreater(5,4) = 1 Legal ops: ! ~ & ^ | + > Max ops: 24 Rating: 3
..
是否有任何这样的处理器,它们有指令绕过特定数据的缓存? 这个问题也有一个答案,表明SSE4.2指令确实绕过了缓存.有人可以启发我吗? 解决方案 通常,缓存策略由内存管理单元(MMU)控制.对于每个地址范围,都会确定一个缓存策略.这些表由OS管理,并且在系统空间中可用. 作为对您可能要问的问题的补充说明,对于具有高速缓存的体系结构,通常有CPU命令可用于同步/无效/刷新高速缓存.但是,与MM
..
在32位模式下,英特尔通过反转寄存器扩展的高位来解决VEX前缀与LDS/LES冲突,因为ModRM字节的mod字段不能为11b VEX前缀的初始字节值C4h和C5h与LDS和LES指令的操作码相同.在64位模式下不支持这些指令.为了解决32位模式下的歧义,VEX的规范利用了一个事实,即合法的LDS或LES的ModRM字节不能采用11xxxxxx的形式(这将指定寄存器操作数). VEX前缀的第
..
"ret"指令是否导致"esp"寄存器加4? 解决方案 是的,它执行 pop eip 您可以使用 mov eax, [esp] jmp eax 避免它. 编辑:这正是ret的作用.例如,jmp rel_offet就是隐藏的add eip, offset,或者jmp absolute_offset是mov eip, absolute_offset.当然,处理器处理它
..
我一直在努力理解来自x86汇编语言的ASCII调整指令. 我在互联网上看到的所有信息都在告诉我不同的东西,但是我猜想这就是同一件事,只是我以不同的方式解释了这一点. 谁能用 AAA , AAS 我们必须相加,从AL的低位半字节中减去6? 并且有人可以在其中解释AAM,AAD和十进制调整指令伪代码英特尔指令集手册也是如此,为什么如此,其背后的逻辑是什么? 最后,有人可以举
..
在大多数体系结构上,指令都是固定长度的.这使得程序的加载和执行变得简单.在x86/x64上,指令的长度是可变的,因此反汇编的程序可能如下所示: File Type: EXECUTABLE IMAGE 00401000: 8B 04 24 mov eax,dword ptr [esp] 00401003: 83 C4 04 ad
..