Assembly 为什么x86汇编程序寄存器用X H和L命名?
我正在学习asm,我很好奇为什么寄存器的名称是用这些字母指定的,因为理解这一点可以帮助我在另一个层面上理解它。也就是说,AL是最低有效字节,“L”是什么意思 图像来源: 当最初的“A”(累加器)演变为16位AX时,仍然需要识别L低阶(7-0)和H高阶(15-8)位。因此AL&AH。low和high的含义已经存在了很长一段时间,所以可能是因为这个原因才采用了它,但它也可以很容易地被ah=AL=Left 8位和AL=AR=right 8位 当您进入64位时,这些命名约定基本上是假名,寄存器被标识为R0-R15。所以R2B是CL,R2W变成CX,依此类推 当最初的“A”(累加器)演变为16位AX时,仍然需要确定L低阶(7-0)和H高阶(15-8)位。因此AL&AH。low和high的含义已经存在了很长一段时间,所以可能是因为这个原因才采用了它,但它也可以很容易地被ah=AL=Left 8位和AL=AR=right 8位Assembly 为什么x86汇编程序寄存器用X H和L命名?,assembly,x86,history,Assembly,X86,History,我正在学习asm,我很好奇为什么寄存器的名称是用这些字母指定的,因为理解这一点可以帮助我在另一个层面上理解它。也就是说,AL是最低有效字节,“L”是什么意思 图像来源: 当最初的“A”(累加器)演变为16位AX时,仍然需要识别L低阶(7-0)和H高阶(15-8)位。因此AL&AH。low和high的含义已经存在了很长一段时间,所以可能是因为这个原因才采用了它,但它也可以很容易地被ah=AL=Left 8位和AL=AR=right 8位 当您进入64位时,这些命名约定基本上是假名,寄存器被标识为R
当您进入64位时,这些命名约定基本上是假名,寄存器被标识为R0-R15。所以R2B是CL,R2W变成CX,依此类推
x
-扩展,h
-高字节,l
-低字节。在开始时,(a,b,c,d)
-8位处理器,另一个字节
用于16位处理器(al,ah,bl,bh,…)
,扩展另一个字
,例如(ax,bx,…)
到32位处理器,用于寄存器(eax,ebx,…)
为64位处理器添加另一个双字32位扩展(rax,rbx,…)
时间在流逝…谢谢,这非常清楚地回答了我的问题相关:,和。当然,当优化性能而不是代码大小时,像rep sca
这样的指令并不总是最好的,因此您应该选择最方便的寄存器(最少/最便宜的指令)除非选择是任意的,否则不要太在意它们的名字。通过使用类似的寄存器使用模式可能有助于压缩代码,例如,当您在编写4kB简介时,有时最好使用更多的push/pop/mov
指令,将f.e.esi
用作任何地方的“源”地址,组装后具有like+40B(比使用备用寄存器并保存push/pop
对的版本),但压缩后的字节更少。但这一建议仅与尺寸限制介绍编码相关,不适用于“生产”软件。如果你在普通模式中使用寄存器,它在阅读过程中会读得稍微好一点=即使对于严重的软件也是有利的(但为什么是asm?)。许多相关和重复的问题:,,,,x
-扩展,h
-高字节,l
-低字节。在开始时,(a,b,c,d)
-8位处理器,另一个字节
用于16位处理器(al,ah,bl,bh,…)
,扩展另一个字
,例如(ax,bx,…)
到32位处理器,用于寄存器(eax,ebx,…)
为64位处理器添加另一个双字32位扩展(rax,rbx,…)
时间在流逝…谢谢,这非常清楚地回答了我的问题相关:,和。当然,当优化性能而不是代码大小时,像rep sca
这样的指令并不总是最好的,因此您应该选择最方便的寄存器(最少/最便宜的指令)除非选择是任意的,否则不要太在意它们的名字。通过使用类似的寄存器使用模式可能有助于压缩代码,例如,当您在编写4kB简介时,有时最好使用更多的push/pop/mov
指令,将f.e.esi
用作任何地方的“源”地址,组装后具有like+40B(比使用备用寄存器并保存push/pop
对的版本),但压缩后的字节更少。但这一建议仅与尺寸限制介绍编码相关,不适用于“生产”软件。如果你在普通模式中使用寄存器,它的阅读效果会稍微好一点=即使对于严肃的软件也是有利的(但为什么是asm呢?)。许多相关和重复的问题:,,因为寄存器的编号方式很奇怪,CL是R1B,BL是R3B。@prl我应该记住,大多数文档并不以编码顺序表示寄存器。AX=R0W,CX=R1W,DX=R2W,BX=R3W,SP=R4W,BP=R5W,SI=R6W,DI=R7W。由于某些原因,甚至在英特尔的文档中,它通常是AX、BX、CX、DX、SI、DI、SP和BP。由于寄存器的编号方式很奇怪,CL是R1B,BL是R3B。@prl我应该记得,大多数文档并不以编码顺序表示寄存器。AX=R0W,CX=R1W,DX=R2W,BX=R3W,SP=R4W,BP=R5W,SI=R6W,DI=R7W。出于某种原因,甚至在英特尔的文档中,它通常是AX、BX、CX、DX、SI、DI、SP和BP。