标签: machine-code

方向/符号扩展x86指令集中的位

在x86指令集中,索引1处的位可以是指定目标和源操作数的方向位,也可以是符号扩展位.我想知道最简单的逻辑方法是什么,以确定它是哪种情况.有没有办法检查除了检查指令操作码并比较它们以找出它是什么(对于指令的符号扩展或方向位变体)?还有一些指令忽略了这一位,但由于它被设置为0,因此它并不重要.

编辑:事实证明,对于写入错误(这是我的代码所针对的),reg-> r/m始终是这种情况,因为ar/m-> reg指令永远不会触发写入错误.但是,如果其他人遇到类似的问题,任何信息仍然会很好.

x86 assembly x86-64 machine-code opcode

6
推荐指数
1
解决办法
1404
查看次数

x86-64 AMD上CALL指令的操作数生成

以下是示例程序的objdump输出,

080483b4 <display>:
 80483b4:       55                      push   %ebp
 80483b5:       89 e5                   mov    %esp,%ebp
 80483b7:       83 ec 18                sub    $0x18,%esp
 80483ba:       8b 45 0c                mov    0xc(%ebp),%eax
 80483bd:       89 44 24 04             mov    %eax,0x4(%esp)
 80483c1:       8d 45 fe                lea    0xfffffffe(%ebp),%eax
 80483c4:       89 04 24                mov    %eax,(%esp)
 80483c7:       e8 ec fe ff ff          call   80482b8 <strcpy@plt>
 80483cc:       8b 45 08                mov    0x8(%ebp),%eax
 80483cf:       89 44 24 04             mov    %eax,0x4(%esp)
 80483d3:       c7 04 24 f0 84 04 08    movl   $0x80484f0,(%esp)
 80483da:       e8 e9 fe ff …
Run Code Online (Sandbox Code Playgroud)

linux x86 assembly machine-code

6
推荐指数
2
解决办法
3954
查看次数

为什么JIT-ed语言比原生C/C++更慢,内存效率更低?

解释器做了很多额外的工作,因此可以理解它们最终比本机机器代码慢得多.但是像C#或Java这样的语言有JIT编译器,据说它们可以编译成平台本机代码.

然而,根据看似合法的基准,在大多数情况下仍然比C/C++慢2-4倍?当然,我的意思是与同等优化的C/C++代码相比.我很清楚JIT编译的优化优势以及它们生成比优化不佳的C + C++更快的代码的能力.

关于Java内存分配有多好的噪音,为什么这么可怕的内存使用呢?2x到50x,在特定的基准测试套件中平均使用的内存大约多30倍,这对于打喷嚏没什么...

请注意,我不想启动WAR,我要求提供定义这些性能和效率数据的技术细节.

performance jit memory-management native machine-code

6
推荐指数
1
解决办法
607
查看次数

编译器如何编译编译器?

来自高级编程背景,我有兴趣学习低级编程.我想知道如何编译编译器?

在查看wiki中的一些文章后,数字机器代码被认为是最低级语言,但必须有一个编译器来编译这个机器代码.编写的编译器是什么语言?

compiler-construction machine-code low-level

6
推荐指数
3
解决办法
6554
查看次数

我们所说的指令大小是什么意思?

我真的很困惑,这个问题可能听起来很愚蠢,但是当我们说指令大小是 32 位或 16 位时,我真的不确定这意味着什么。

如果操作数大小是 32 位,那么我们说它是 32 位指令,如果操作数大小是 16 位指令。

或者每条指令都有操作码,如果操作码地址是 32 位,那么我们说指令是 32 位。

我也在浏览 ARM 架构,在那里我读到的所有拇指指令都是 16 位的,但 ARM 模式指令是 32 位的。

指令大小完全取决于所使用的架构还是取决于 CPU 的运行模式?

编辑:

http://www.xgc-tek.com/manuals/m1750-ada/m1750/x524.html

给定的链接表明,16 位指令由 8 位操作码和 4+4 位两个通用寄存器组成。

ARM拇指指令集是怎么回事??

assembly arm machine-code instructions thumb

6
推荐指数
2
解决办法
8753
查看次数

是否可以查看JVM热点编译器生成的机器代码?

我想知道,是否可以了解HotSpot编译器在编译给定的Java字节码类或方法时生成的实际机器代码?

java bytecode machine-code

6
推荐指数
1
解决办法
606
查看次数

什么将汇编语言转换为机器代码

我是编程新手,我从C++语言开始,据我所知,C++编译器将C++语言转换为汇编语言(例如:Visual Studio),但我试着查找将汇编语言转换为机器代码的内容.由计算机理解和执行,但我找不到答案.

所以问题是汇编语言在何处以及如何转换为机器码?它是由OS中集成的某种编译器吗?

提前致谢.

assembly machine-code object-code

6
推荐指数
3
解决办法
4万
查看次数

GameBoy将16位加载到8位内存中

我已经开始为Gameboy经典编写一个模拟器,这是我在成功的Chip 8模拟器之后的下一个项目.

作为参考,我使用GameBoy CPU手册.

现在在第66页它说:

LD  A,(HL)  7E  8
Run Code Online (Sandbox Code Playgroud)

基本上,将值HL加载到寄存器A.

但是,据我所知,这会将16位值HL加载到8位寄存器A中.这当然不合适.

你知道这是怎么回事吗?所有其他参考文献只是简单的表格,没有解释,但说同样的事情.

谢谢你的回答!

emulation machine-code gameboy

6
推荐指数
1
解决办法
489
查看次数

为什么 repe 和 repne 在 movsb 之前做同样的事情?

我很快就有了一个组装测试,在准备的时候,我注意到了一些奇怪的事情。
repe movsb在 ZF=0 时重复,我被教导repe应该在 CX 不等于 0 和 ZF=1 时重复。
我做了一些测试,发现之前movsbrepreperepne指令的工作方式相同。
对此有何解释?

编辑:这是代码:

.model small
    .data
    A db   '   This     is    a    test '
    N  db  27
    .stack 10h
    .code
    mov ax,@data
    mov ds,ax
    mov es,ax
    cld
    mov al,' '
    mov cl,N
    xor ch,ch
    mov di,offset  A
    next:  repe scasb
    jcxz cont        ; jump if cx=0
    dec di
    inc cx
    xchg  si,di      ; swap between si and di …
Run Code Online (Sandbox Code Playgroud)

x86 assembly machine-code repeat instructions

6
推荐指数
1
解决办法
1768
查看次数

“REX”在 x86-64 REX 前缀中代表什么?

Intel 的 SDM 中,第 2.2.1 节指定 REX 前缀用于:

  • 指定 GPR 和 SSE 寄存器。
  • 指定 64 位操作数大小。
  • 指定扩展控制寄存器

但是首字母缩略词中的字母 REX 代表什么?

x86 assembly x86-64 intel machine-code

6
推荐指数
1
解决办法
656
查看次数