使用以下代码,我尝试将 ebx 的低两个字节“存储”在两个高字节中,然后使用低阶 bx 作为访问“池”偏移量的临时变量。最后,我通过右移数据来恢复原始值(它最初只使用低两个字节)。
rol ebx, 16
mov bl, dl
;(other operations involving bx)
mov [pool+bx], dword esi
shr ebx, 16
这与 nasm 组装得很好,但是我得到了错误
重定位被截断以适应:R_386_16 针对“.data”
链接时。有关如何绕过此错误的任何建议?简单地使用另一个寄存器不是一种选择,因为实际上每个寄存器都保存 esp 并且正在使用段寄存器。
编辑:我想有人会问,所以我使用的是 32 位程序集