- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 x86 或 amd64 上使用汇编指令时,程序员可以使用“Intel”(即 nasm
编译器)或“AT&T”(即 gas
编译器)汇编语法。 “Intel”语法在 Windows 上更流行,但“AT&T”在 UNIX(类)系统上更流行。
但是 Intel 和 AMD 手册,即芯片创建者创建的手册,都使用“Intel”语法。
我想知道,“AT&T”语法设计背后的最初想法是什么?远离处理器创建者使用的符号有什么好处?
最佳答案
长期以来,UNIX 是在 PDP-11 上开发的,PDP-11 是来自 DEC 的 16 位计算机,具有相当简单的指令集。几乎每条指令都有两个操作数,每个操作数都可以具有以下八种寻址模式之一,此处以 MACRO 16 汇编语言显示:
0n Rn register
1n (Rn) deferred
2n (Rn)+ autoincrement
3n @(Rn)+ autoincrement deferred
4n -(Rn) autodecrement
5n @-(Rn) autodecrement deferred
6n X(Rn) index
7n @X(Rn) index deferred
27 #imm immediate
37 @#imm absolute
67 addr relative
77 @addr relative deferred
@
和
#
作为控制字符,
$
被替换为
#
和
*
为
@
.
011273
mov (R2),R3
R2
指向的单词至
R3
.
mr0 X(bx,si) bx + si indexed
mr1 X(bx,di) bx + di indexed
mr2 X(bp,si) bp + si indexed
mr3 X(bp,di) bp + di indexed
mr4 X(si) si indexed
mr5 X(di) di indexed
mr6 X(bp) bp indexed
mr7 X(bx) bx indexed
3rR R register
0r6 addr direct
m
如果没有索引,则为 0,
m
如果存在一字节索引,则为 1,
m
如果有两字节索引和
m
,则为 2如果使用寄存器而不是内存操作数,则为 3。如果存在两个操作数,则另一个操作数始终是寄存器并在
r
中编码数字。否则,
r
对操作码的另外三位进行编码。
$imm
就像在 PDP-11 语法中一样。
dst, src
其汇编器的操作数顺序,没有特别令人信服的理由来适应这个约定,UNIX 汇编器被编写为使用
src, dst
PDP11 中已知的操作数顺序。
jmp
(跳跃)和
jsr
(跳转到子程序)跳转到其操作数的地址。因此,
jmp foo
会跳转到
foo
和
jmp *foo
将跳转到存储在变量
foo
中的地址, 类似于
lea
在 8086 中工作。
jmp
和
call
指令的设计就好像这些指令在 PDP11 上工作一样,这就是
jmp foo
跳转到
foo
和
jmp *foo
跳转到地址
foo
处的值,即使 8086 实际上没有延迟寻址。这具有在语法上区分直接跳转和间接跳转而不需要
$
的优点和便利。每个直接跳转目标的前缀,但在逻辑上没有多大意义。
seg:addr
disp(base,index,scale)
disp
是位移,base 是基址寄存器,
index
索引寄存器和
scale
是 1、2、4 或 8,以按这些数量之一缩放索引寄存器。这等同于 Intel 语法:
[disp+base+index*scale]
b
或
w
操作码的后缀,它直接切换操作码的第一位:
010001 movw r0,r1
110001 movb r0,r1
l
表示
long
)和 64 位指令(后缀
q
表示四路)。
ax
的 C 函数。来自注册
ax
.当 Unix System Laboratories 开发 ELF 二进制格式时,他们决定摆脱这种装饰。由于无法区分直接地址和寄存器,否则
%
前缀被添加到每个寄存器:
mov direct,%eax # move memory at direct to %eax
关于assembly - 设计 AT&T 汇编语法的最初原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42244028/
我有一个使用 Sinch SDK 和 CallKit 实现的 VOIP 应用程序。一切正常,除了设备插入耳机时。在后一种情况下,当通话开始时,音频仍通过设备的主扬声器路由。如果我在通话期间拔下并重
我需要将大量复杂(20 多个属性)对象过滤成多个子列表。要创建子列表,我有一个过滤器规范列表。要求是:a) 不允许一个项目成为两个子列表的一部分,并且 b) 必须能够在处理完成后获取所有未分割的项目。
我有一个简单的 .share-toggle 切换链接。当您点击它时,Facebook 评论插件应该会显示。它最初应该被 Conceal 问题是,如果我使用 css Conceal 它,然后单击切换按钮
我正在尝试制作一个功能类似于 android 市场的图库,您可以在其中滚动(左/右)以查看免费或付费应用程序等...还可以在布局中上下滚动。 到目前为止,我只是让它加载了两个布局,它们都有一个简单的“
大家好,我是网络开发的新手,最近刚刚完成我对网络设计的第一次尝试。我偶然发现了一个我找不到解决方案的问题。在 webkit-browsers 中,我的一个 ul-lists(导航)最初呈现在错误的位置
我遇到了这个问题。我在 ISP 上使用 Umbraco CMS 启动了一个 ASP.NET 网站。(这只是一个非常基本的信息网站。没什么特别的。) 但是,当我想要访问该网站时,第一个页面加载需要很长时
在我的 iPhone 应用程序中,我使用 UITabBarController 布置了三个选项卡。第一个选项卡(在应用启动时加载)使用本地数据加载,速度非常快。 虽然第二个选项卡从网络下载 XML 文
我有这样的风格: #cytoscape-container { width: 100%; height: 100%; margin: 0 aut
我在这里看到了几篇关于 SO 的帖子,但它们在功能和结构上过于具体,而我正在寻找的是我或任何人都可以在任何地方使用的更通用的东西。 我只需要有一个按钮,单击该按钮可以在 3 类之间循环。但如果出现必须
我在 http://www.raven.dima.neoturbine.net/ 有一个网页我正在努力。顶部导航在 IE 8、Firefox 3.6 和适用于 Android 的 Dolphin 浏览
我想将主机的用户/组与 docker 机器同步,以使(开发人员)能够编辑容器内部或外部的文件。有一些这样的想法:Handling Permissions with Docker Volumes这会创建
向通知列表/栏发布推送通知时,.contentText 和 .number 最初不显示(.ticker、.icon 和 .contentTitle 显示正常)。但是,在发布另一个通知(具有不同的 ID
我实现了以下 MKMapView 方法,该方法在添加注释后运行。我在 Interface Builder 中将我的 MKMapView map (parishMap) 设置为“显示用户位置”,并且在加
我是一名优秀的程序员,十分优秀!