是否可以在NASM中保留汇编指令的冗余前缀?

时间:2014-07-30 15:10:18

标签: assembly x86 nasm

我需要测试Windows模拟器是否正确识别并处理太长(超过15个字节长)的指令。我用NASM编译代码。 我知道指定一个太长的指令的唯一方法是在指令中添加前缀。让我们说我做了以下事情:

rep O32 rep O32 rep O32 rep O32 rep O32 mov eax, [fs:0]

在这种情况下,我应该得到一个16字节长的指令,因为mov eax, [fs:0]是一个6字节长的指令,加上10 O32rep前缀等于16字节。

至少理论是......但是当我用NASM编译它并反汇编得到的二进制文件时,我发现从那里获取了不必要的前缀:只剩下1个rep前缀显然是fs段前缀。因此,指令的总长度减少到只有7个字节。我想这是应该如何工作的,但有没有办法使它的指令长度实际上超出界限?

1 个答案:

答案 0 :(得分:0)

您声明mov eax, [fs:0]是一个6字节长的指令。这意味着您使用的是16位代码。 (32位代码需要7个字节)

因此mov ax,1将使用3个字节。您已经添加了12个操作数大小的前缀。 这总计达到15,这仍然是完全合法的。因此,您还没有测试过“Windows模拟器”。

如果提供的解决方案是32位代码,那么总数将是16个字节。

只是好奇:模拟器是否在抱怨?