免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7764 | 回复: 16
打印 上一主题 下一主题

xchg命令是如何在cpu层面实现的? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-24 09:04 |只看该作者 |倒序浏览
在高级语言当中,实现两个变量的值交换,
要么,用一个临时变量tmp=x,x=y,y=tmp,要3条语句
要么,用异或: x^=y,y^=x,要两条语句。

但是汇编用一个xchg x,y一条语句就搞定了。
这个xchg在cpu层面是如何实现的? (我没有学过组成原理和体系结构),还是说,实际上也是用的临时变量,只不过是在硬件层面?

请高手解释一下哈,非常感谢!

论坛徽章:
0
2 [报告]
发表于 2010-12-24 14:22 |只看该作者
我是低手,但我想是有一个临时的寄存器来做这事吧,只不过用硬件实现,而了且把这个临时寄器屏蔽了。这只是我的想法,但不知道lz为什么关心这个问题。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
3 [报告]
发表于 2010-12-25 15:22 |只看该作者
在高级语言当中,实现两个变量的值交换,
要么,用一个临时变量tmp=x,x=y,y=tmp,要3条语句
要么,用异或 ...
kgisme170 发表于 2010-12-24 09:04



    硬件就是硬件,不要用软件的思维思考硬件。
  两个寄存器对调,verilog语言:
reg[31:0]r1,r2;
   always@(posedge clk)
   ...
   if(xchg)
   begin
             r1<=r2;
             r2<=r1;
   end
   else
        ...
    对于处理器而言,刚才verilog里的xchg交换信号是前面的电路驱动的结果   
   节选一下,就是一对d触发器组在xchg信号有效的时候,两边的d和q互相“连接”

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
4 [报告]
发表于 2010-12-25 15:25 |只看该作者
硬件就是硬件,不要用软件的思维思考硬件。
  两个寄存器对调,verilog语言:
reg[31:0]r1,r2;
...
cjaizss 发表于 2010-12-25 15:22


当然,这只是硬件上的真正意义上的寄存器的互换,而对于像处理器这么复杂的电路,只要在汇编的语意上保持一致即可,不一定内部真的马上就实现两组触发器对换,可能会拖到之后实现。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
5 [报告]
发表于 2010-12-25 15:27 |只看该作者
在高级语言当中,实现两个变量的值交换,
要么,用一个临时变量tmp=x,x=y,y=tmp,要3条语句
要么,用异或 ...
kgisme170 发表于 2010-12-24 09:04



    从数字电路意义上来讲,一般是没有所谓软件上的“临时变量”这么一说的,硬件和软件的思维以及意义是不一样的,软件更加抽象一些,

论坛徽章:
0
6 [报告]
发表于 2010-12-25 17:49 |只看该作者
intel手册给的解释是

Operation
TEMP ←  DEST;
DEST ←  SRC;
SRC ←  TEMP;
可以理解为有个临时寄存器

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
7 [报告]
发表于 2010-12-26 00:19 |只看该作者
intel手册给的解释是

Operation
TEMP ←  DEST;
DEST ←  SRC;
SRC ←  TEMP;
可以理解为有个临时寄 ...
epegasus 发表于 2010-12-25 17:49



    我想,这只是它语意的解释吧,实现不一定的。

论坛徽章:
0
8 [报告]
发表于 2010-12-26 21:44 |只看该作者
intel手册给的解释是

Operation
TEMP ←  DEST;
DEST ←  SRC;
SRC ←  TEMP;
可以理解为有个临时寄 ...
epegasus 发表于 2010-12-25 17:49



    楼上几位都是高人啊

论坛徽章:
0
9 [报告]
发表于 2010-12-27 23:20 |只看该作者
回复 1# kgisme170


    楼主可以看些讲isa的书籍,我猜测应该是一个clock之后在时序逻辑驱动下两个存储单元内容自动交换了,不需要一个临时存储单元,这个过程并不复杂,连8051都有这种指令而且是单机器周期指令,我觉得实现最复杂的指令是DSP(矩阵,FFT等)和SIMD等类指令

论坛徽章:
0
10 [报告]
发表于 2010-12-28 17:27 |只看该作者
回复 9# garyv


    我觉得是不可以没有temp的,至少temp应该是1bit
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP