swap指令疑问 点击:825 | 回复:3



1U钽电容

    
  • 精华:0帖
  • 求助:13帖
  • 帖子:31帖 | 51回
  • 年度积分:0
  • 历史总积分:924
  • 注册:2002年6月29日
发表于:2013-08-18 18:41:51
楼主

我用swap指令做实验,结果如下图片,疑惑,不是高低字节互换吗?怎么会这样?

1:赋值d8 为1218

2:x1触发,结果d8的值为-15868!?!?!怎么这样?请教大家

 




yuanle

  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 10210回
  • 年度积分:2747
  • 历史总积分:48332
  • 注册:2005年4月22日
发表于:2013-08-18 19:27:29
1楼

换成二进制不就知道了么。


1218  二进制  10011000010

经过Swap,然后高低字节对换:1100 0010 0000 0100

最高位为1,代表负数,保留符号位,就成了100 0010 0000 0100

反码加1,就成了011 1101 1111 1100,也就是15868,因为最高位是负数,所以

就成了-15868            

1U钽电容

  • 精华:0帖
  • 求助:13帖
  • 帖子:31帖 | 51回
  • 年度积分:0
  • 历史总积分:924
  • 注册:2002年6月29日
发表于:2013-08-21 22:46:29
2楼

哦  原来如此。。感谢指导

ljbcompany

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 1289回
  • 年度积分:0
  • 历史总积分:5847
  • 注册:2011年4月24日
发表于:2013-08-22 08:23:13
3楼

swap指令就是把16位拆成高8位和低8位,默认的次序:b15......b0;执行后次序:b7......b0 b15......b8

该指令功能比较简单,它将数值转换成BCD码;然后交换一下高8位和低8位的次序而已。如果需要灵活地调整4组BCD码值,推荐smov指令。


热门招聘
相关主题

官方公众号

智造工程师