Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 为什么x86汇编程序寄存器用X H和L命名?_Assembly_X86_History - Fatal编程技术网

Assembly 为什么x86汇编程序寄存器用X H和L命名?

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

我正在学习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位


当您进入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。