【发布时间】:2018-07-21 15:05:51
【问题描述】:
我正在学习 asm,我很好奇为什么寄存器的名称用这些字母指定,因为理解这可能有助于我在另一个层面上理解它。 IE。 AL是最低有效字节,但是“L”是什么意思呢?
图片来源:http://www.cs.virginia.edu/~evans/cs216/guides/x86.html
【问题讨论】:
-
x- 扩展,h- 高字节,l- 低字节。一开始(a, b, c, d)- 8 位处理器,另一个byte用于16 位处理器(al, ah, bl, bh, ...),扩展了另一个word,例如(ax, bx, ...)到 32 位处理器的寄存器(eax, ebx, ...)添加另一个double-word64 位处理器的 32 位扩展(rax, rbx, ...)时间在继续…… -
谢谢,这很清楚地回答了我的问题
-
相关:Why are first four x86 GPRs named in such unintuitive order? 和 What do the register-names like esi mean, and what special purposes do they have.。当然,在优化性能而不是代码大小时,
rep scas之类的指令并不总是最好的,所以你应该选择最方便的寄存器(最少/最便宜的指令)而不关心它们的名字,除非选择是任意。 -
通过使用类似的寄存器使用模式可能有助于压缩代码,例如,当您处理 4kB 介绍时,有时最好使用更多
push/pop/mov指令来使用 f.e.esi到处都是“源”地址,在组装后具有 +40B (比使用备用寄存器并保存push/pop对的版本),但压缩后的字节数更少。但此建议仅与 size-limit-intro 编码相关,不适用于“生产”软件。如果您在常见模式中使用寄存器 = 即使对于严重的 SW 也有优势(但为什么要使用 asm 呢?)。