英特尔语法是[eax + ebx],什么是AT&T语法等价?

use*_*454 0 x86 assembly intel

程序 集中strlen的问题是关于程序集中的 strlen,但这似乎是用AT&T语法编写的,遗憾的是我的汇编程序不支持.

我只是好奇你如何将语法[eax + ebx]翻译成intel的语法?

所以

4(%eax)     # offset 4
Run Code Online (Sandbox Code Playgroud)

相当于

[eax + 4]
Run Code Online (Sandbox Code Playgroud)

假设偏移值存储在%ebx中.什么是等价的

[eax + ebx]
Run Code Online (Sandbox Code Playgroud)

%ebx(%eax)     # doesn't work!
Run Code Online (Sandbox Code Playgroud)

谢谢,

int*_*jay 8

[eax+ebx]应该翻译成(%eax,%ebx).

AT&T语法中内存地址的完整语法是:

offset(%reg1,%reg2,scale)
Run Code Online (Sandbox Code Playgroud)

这相当于:

[reg1 + reg2*scale + offset]
Run Code Online (Sandbox Code Playgroud)

offset并且scale是常量值,scale必须为1,2,4或8.默认值为0表示偏移量,1表示比例.