如何取32位通用寄存器的高16位?

aoudsk 2009-11-15 07:02:41
像EAX,EBX...这些32位通用寄存器的低16可以很方便的存取数据!但高16位却不知怎么样使用!
虽然可以右移16位来取高位或用其它方法,但要消耗好多时间!没有很直接的方法来取32位寄存器的高16位?
...全文
1423 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
sax小bin 2009-11-21
  • 打赏
  • 举报
回复

应该还有指令是取来取高位的
hehe3434 2009-11-21
  • 打赏
  • 举报
回复
用逻辑运算屏蔽低十六位?
nanlingcg 2009-11-20
  • 打赏
  • 举报
回复
留个记号。。。。。
desdouble 2009-11-20
  • 打赏
  • 举报
回复
shrl $16, %eax或roll $16, %eax
miaomiao83 2009-11-18
  • 打赏
  • 举报
回复
DING
budao3 2009-11-18
  • 打赏
  • 举报
回复
不好意思,记错了
bswap是把第一字节和第四个字节交换,把第二个字节和第三个字节交换

sorry
  • 打赏
  • 举报
回复
bswap是按字节逆序,不是将eax的高16位和低16位交换。
如果用bswap的话,还要再xchg ah,al。
budao3 2009-11-17
  • 打赏
  • 举报
回复
可以用BSWAP來实现:
bswap EAX;所做的是将eax的高16位和低16位交换;
这条指令之后,AX就是原先的EAX的高16位了
cnzdgs 2009-11-16
  • 打赏
  • 举报
回复
移位操作是很快的,不会消耗很多时间,一般都是用这种做法。
另一种做法是把32位寄存器赋给一个变量,再从变量中取高16位,这种做法效率明显低于移位操作。
  • 打赏
  • 举报
回复
先交换高低16位再用ax:shrd eax,eax,16 ; shld eax,eax,16也行




xiaopoy 2009-11-16
  • 打赏
  • 举报
回复
定义一个内容为 reg32>> 16的宏即可。
gp341 2009-11-16
  • 打赏
  • 举报
回复
dword a

mov a, eax

word ptr a+4 就是高16位吧
desdouble 2009-11-16
  • 打赏
  • 举报
回复
没有直接的方法和指令,间接的方法中移位操作是最快的:

因为通用寄存器是CPU存取数据最快的地方,shrl指令是实现楼主目的最快的指令。cpu只需一个周期,无需等待。
大熊猫侯佩 2009-11-16
  • 打赏
  • 举报
回复
eax>>16
devilidea 2009-11-15
  • 打赏
  • 举报
回复
学习
yuteria 2009-11-15
  • 打赏
  • 举报
回复
可以用AH来使用AX中的高位啊

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧