标签: opcode

JVM规范中JSR/RET的状态

JVM规范的某些部分建议操作JSR(Jump SubRoutine),JSR_W(Jump SubRoutine Wide)RET(从子例程返回)仅可用于类文件版本50.0(JDK 1.6):

3.13最后编译

(本节假设编译器生成版本号为50.0或更低版本的类文件,以便可以使用jsr指令.另请参见§4.10.2.5.)

然后:

4.10.2.5.例外和finally

要实现try- finallyconstruct,生成class版本号为50.0或更低版本的文件的Java编程语言的编译器可以使用异常处理工具和两个特殊指令:jsr("跳转到子例程")和ret("从子例程返回" ").

另一方面,操作码描述本身并未说明这些功能的弃用.引用的文本只说明过去50.0版本中的版本如何,但在此之后并没有明确说明事态.

这个评论(对于询问这种弃用或删除背后的动机的问题)表明了类似的混淆程度,所以显然我并不是唯一一个寻找此问题的人.

java jvm finally opcode jvm-bytecode

9
推荐指数
1
解决办法
738
查看次数

有人可以解释这个直接组装的x86 JMP操作码吗?

在学校,我们一直使用引导程序来运行没有操作系统的独立程序.我一直在研究这个程序,当启用保护模式时,通过直接将操作码和操作数组合为程序中的数据来执行远程跳转.这是为GNU汇编程序:


         /* this code immediately follows the setting of the PE flag in CR0 */

.byte   0x66, 0xEA
.long   TARGET_ADDRESS
.word   0x0010          /* descriptor #2, GDT, RPL=0 */
Run Code Online (Sandbox Code Playgroud)

首先,为什么要这样做(而不是指令助记符)?

我一直在看英特尔的手册,但我仍然对代码感到困惑.特别是在第2A卷第3-549页,有一个操作码表.相关条目:

EA *cp* JMP ptr16:32  Inv.  Valid  Jump far, absolute, address given in
operand

实际的操作码是显而易见的,但是第一个字节0x66让我感到困惑.参考英特尔手册中的表格,cp显然意味着将遵循一个6字节的操作数.显然,在接下来的两行中会有6个字节.0x66编码'操作数大小覆盖前缀'.这与表中的cp有什么关系?我原以为cp会有一些十六进制值,而是有这个覆盖前缀.有人可以帮我清楚一下吗?

这是od的转储:

c022    **ea66    0000    0001    0010**    ba52    03f2    c030

TARGET_ADDRESS定义为0x00010000.

我也对最后两个字节的重要性感到困惑.然而,这似乎是另一个问题.现在已经很晚了,我一直盯着代码和英特尔手册几个小时,所以我希望我明白我的观点.

谢谢你的期待!

x86 assembly gnu opcode protected-mode

8
推荐指数
1
解决办法
6314
查看次数

汇编:什么是语义NOP?

我想知道汇编中的"语义NOP"是什么?

security assembly opcode

8
推荐指数
1
解决办法
382
查看次数

intel机器码到汇编代码问题

专家,我不知道intel x86 machineCode/assemblyCode转换是singleSide还是BothSide?

意思是:assemblyCode ---> machineCode和machineCode ---> assemblyCode都可用.

由于x86 machineCode的大小不同(1-15字节),并且操作码在(1-3字节)中变化,如何确定一个操作码是1byte还是2byte还是3byte?

我从来没有找到x86指令前缀的例子,如果这里是1byte前缀,如何确定它是前缀还是操作码?

当然,assemblyCode ---> machineCode,助记符+ oprand [w/b]的标识可以通过maping某些MappingTable来确定响应machineCode是什么.

但是,当过程逆转时:

{bbbbbbbb,bbbbbbbb,bbbbbbbb,// instruction1 bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,// instruction2 bbbbbbbb,bbbbbbbb // instruction3}

----> {bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb}

我不知道确定一条指令的长度(大小)的重要位或字节.

任何人都会告诉我如何确定?(操作码的大小,前缀示例.)感谢您的帮助.

format x86 assembly intel opcode

8
推荐指数
1
解决办法
2024
查看次数

APC和PHP - 由于缓存混合导致的站点损​​坏

我希望有人可以帮我解决这个问题.我最近在我的一些服务器上运行APC,这些服务器只托管一个应用程序,并且它运行良好.不幸的是,我今晚在我的主力网络服务器上运行它,一旦我打开它,我开始从我的wordpress博客"混合".第一个加载的博客会缓存数据库信息,然后加载的每个博客都会收到数据库错误.

我想知道的是,是否有办法以某种方式为缓存添加前缀,以便我可以避免这个问题.我假设缓存会尊重文件之间绝对路径的差异,而不是在多个站点上使用相同的缓存副本... FAIL

提前致谢!

更新

这里要求的是我在/etc/php.d/中使用的apc.ini文件的副本来覆盖默认设置:

/etc/php.d/apc.ini

extension=apc.so
apc.shm_size                    = 64M
apc.max_file_size               = 8M
apc.include_once_override       = 1
apc.stat_ctime                  = 1
Run Code Online (Sandbox Code Playgroud)

php apc virtualhost opcode

8
推荐指数
1
解决办法
3563
查看次数

什么Java代码会强制javac 1.6使用'swap'和'nop'操作码?

我正在开发一个业余的JVM实现,我正在努力确保我对规范中的所有操作码都有测试覆盖率.我已经得到它倒在过去的几年,但nopswap已经躲避我.例如,这是一个可能使用的简单函数swap:

static int do_swap() {
  int a = 56;
  int b = 32;
  return b%a;
}
Run Code Online (Sandbox Code Playgroud)

但是生成的字节码javac 1.6避免了交换代替本地存储:

static int do_swap();
  Code:
   0:   bipush  56
   2:   istore_0
   3:   bipush  32
   5:   istore_1
   6:   iload_1
   7:   iload_0
   8:   irem
   9:   ireturn
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

java jvm bytecode javac opcode

8
推荐指数
1
解决办法
495
查看次数

在if语句中理解PHP操作代码

我正在尝试理解一个简单代码的操作码.

代码是:

<?php

$a = TRUE;

$b = FALSE;

if($a && $b) {
    echo 'done';
}
Run Code Online (Sandbox Code Playgroud)

上述代码的操作码是:

php -dvld.active=1 test.php
Finding entry points
Branch analysis from position: 0
Jump found. Position 1 = 3, Position 2 = 4
Branch analysis from position: 3
Jump found. Position 1 = 5, Position 2 = 7
Branch analysis from position: 5
Jump found. Position 1 = 7
Branch analysis from position: 7
Return found
Branch analysis from position: 7
Branch analysis from position: …
Run Code Online (Sandbox Code Playgroud)

php opcode

8
推荐指数
1
解决办法
662
查看次数

Gameboy(z80)操作码用途

我一直工作在一个游戏机模拟器,和我注意到,有一定的操作码存在是永远不会改变的任何值,如LD A, A,LD B, B等,并且还AND A.第一个显然不会改变任何东西,因为它们将寄存器的值加载到相同的寄存器中,并且由于将ANDA寄存器进行比较,因此AND A将始终返回A.这些操作有什么用途,或者与NOP每个循环后的操作基本相同?

z80 emulation opcode gameboy

8
推荐指数
2
解决办法
1822
查看次数

错误X8000:D3D11内部编译器错误:无效字节码:操作码#86的操作数#1的操作数类型无效(计数从1开始)

我和我的教练/实验室助理一样难以理解.

出于某种原因,以下HLSL代码在输出窗口中返回:

error X8000 : D3D11 Internal Compiler error : Invalid Bytecode: Invalid operand type for operand #1 of opcode #86 (counts are 1-based).
Run Code Online (Sandbox Code Playgroud)

这是导致问题的HLSL中的函数:

// Projects a sphere diameter large in screen space to calculate desired tesselation factor
float SphereToScreenSpaceTessellation(float3 p0, float3 p1, float diameter)
{
float3 centerPoint = (p0 + p1) * 0.5f;

float4 point0 = mul( float4(centerPoint,1.0f) , gTileWorldView);

float4 point1 = point0;
point1.x += diameter;

float4 point0ClipSpace = mul(point0, gTileProj);
float4 point1ClipSpace = mul(point1, gTileProj);

point0ClipSpace …
Run Code Online (Sandbox Code Playgroud)

c++ hlsl opcode operand

8
推荐指数
1
解决办法
1663
查看次数

x86 32位操作码,在x86-x64中有所不同或完全删除

我在x86-x64中查找了维基百科的x86向后兼容性,它说:

x86-64完全向后兼容16位和32位x86代码.因为完整的x86 16位和32位指令集仍然在硬件中实现而没有任何干预仿真,现有的x86可执行文件运行时没有兼容性或性能损失而重新编码以利用处理器设计的新功能的现有应用程序可以实现性能改进.

所以我测试了一些指令,看看有些指令实际上产生完全不同的操作码(而不仅仅是应用前缀),例如:INC/DEC.看(x86):

\ x40 inc eax
\x48 dec eax

在x86-x64中组装相同的产品时:

\ xff\xc0 inc eax

\ xff\xc8 dec eax

我试图弄清楚其他指令的原因和更多例子,这些指令具有产生不同操作码的相同症状.我熟悉x86-x64中的push,pop,call,ret,enter和leave不可用32位.

x86 assembly x86-64 cpu-architecture opcode

8
推荐指数
2
解决办法
2286
查看次数