相关疑难解决方法(0)

关于[base + index*scale + disp]的几个问题

英特尔和AT&T语法中内存寻址的一般形式如下:

[base + index*scale + disp]
disp(base, index, scale)
Run Code Online (Sandbox Code Playgroud)

我的问题如下:

  • 可以baseindex任意注册?
  • 可以scale采用什么值,是1,2,4和8(默认值为1)?
  • indexdisp可互换的(唯一的区别index是寄存器disp是一个常数)?

x86 assembly att intel-syntax addressing-mode

7
推荐指数
1
解决办法
4915
查看次数

引用内存位置的内容.(x86寻址模式)

我有一个内存位置,其中包含一个我想要与另一个角色进行比较的角色(并且它不在堆栈的顶部,所以我不能只是pop它).如何引用内存位置的内容以便进行比较?

基本上我如何在语法上做到这一点.

x86 assembly masm addressing-mode

4
推荐指数
1
解决办法
6687
查看次数

rbp不允许作为SIB基础?

我对x86-64二进制编码很新.我正在尝试修复一些旧的"汇编程序"代码.

无论如何,我正在尝试做这样的事情(英特尔语法):

mov    [rbp+rcx], al
Run Code Online (Sandbox Code Playgroud)

汇编程序目前正在生成:

88 04 0D
Run Code Online (Sandbox Code Playgroud)

但这似乎不是一个有效的指示.如果我将SIB字节中的基数更改rbp为其他寄存器,则可以正常工作.另一种使其工作的方法是添加一个零字节的位移(88 44 0D 00).这似乎与其他类似的操作码一起发生.

为什么我不能rbp在那里使用mod=00

x86 assembly x86-64 machine-code addressing-mode

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