85

帖子

0

TA的资源

一粒金砂(初级)

21
 
     汇编语言的这些部分,实在太折磨人了。我是看过一下的,但是没有用过,稍复杂一点的计算都用C语言了。  SUBC 指令是用于计算除数和被除数都是16 位正整数的情形。被除数放在ACC 低位,ACC高位先清零,除数放在数据存储地址(肯定是16 位,不可能是32 位),然后重复执行16 次SUBC,商就在ACL里,余数在ACH里了。很神奇,是不是?没有仔细推敲过。手册上这么说,理解上好像没错。
    负数化为绝对值,好像应该用NEG 指令的,不是简单去掉符号位。比如说,0FFFFh表示-1,如果去掉符号位,得 07FFFh,表示+ 36767,岂不大谬!
  (数据存储地址的内容)左移15 位后相减,由于ACC是32位,没啥问题。

回复

64

帖子

0

TA的资源

一粒金砂(初级)

22
 
   (ACC)* 2 -> ACC,是左移一位,右边补0。移出的最高位,似乎永远是0 ,不可能是1。因为一开始,ACC高16 位已清0。以后只有在够减时才做减法,否则只移位。所以ACC 不会成为负数。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

23
 
    我有再琢磨了一下SUBC指令,觉得手册上讲的除法算法是对的,我们理解也没问题,按说明设置好ACC和除数后,
RPT 15
  SUBC  dma

  除法就完成了。
  只是设计得实在太巧妙了,不易理解。
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

24
 
可是(数据存储地址的内容)左移15 位后相减,数据存储器是16的,如果再左移15位,不是相当与把数据全都已走了么?我不太明白啊?
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

25
 
    并不需要在存储单元里移(实际上,做完除法存储单元里的除数是保持不变的),而是读出来以后在输入定标移位器里移。“输入定标移位器的功能是,把程序存储器或数据存储器送来的16位数调整为32 位数,然后送往32 位的CALU,”《 ...CPU 与外设》,
p 18。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

26
 
这一点我明白了。thank you!
对带符号的数据进行除法,你能给我点思路么?我有一个除法的子程序,上面直接将除数和被除数进行ABS指令,和你刚才说得好像有点出入。

“负数化为绝对值,好像应该用NEG 指令的,不是简单去掉符号位。比如说,0FFFFh表示-1,如果去掉符号位,得 07FFFh,表示+ 36767,岂不大谬!”

而且我记得符号位位最高位,0FFFFh表示应该表示-7FFF,为什么是-1呢?符号到底要怎么处理呢?

还有就是你刚刚跟我说的小数的问题,怎么含有小数的二进制数进行除法,从而得到十进制数呢?


 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

27
 
      对对,我忘记了,取绝对值应该用ABS指令,这样不必判符号,无论正负,统统 ABS 一下就行了。而 NEG 只能用于负数。
   负数是用补码表示的,并非绝对值加符号位。-1,是:0xFFFF,而不是 0x8001.
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

28
 
谢谢你,我想问一下我要是向编一个带符号含有小数的的除法程序,我的想法是把它们的绝对值相除,然后再把符号加上,可是我不知道怎么使去掉符号的数等于原来的带有符号的数,并且小数我应该怎么处理呢?
我记得你好像有例程,能给我一个汇编的么?

 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

29
 
  我也没有做过,只能说说想法,只要两个数格式相同,(比如,都是Q6),就当做两个整数直接相除就行了。这相当于除数,被除数都同时乘与2 的若干次方,商数不变,是不是?先记住结果的符号,再把两个数 ABS,就可以相除。
 
 
 

回复

53

帖子

0

TA的资源

一粒金砂(初级)

30
 
我想问一下Q6怎么定呢?
还有一个就是除数和被除数ABS以后,所得到的商因该是一个无符号的数,那么这个商的最高位就应该是表示数值得,如果我把符号位加上,不就相当于把数值改变了么?
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

31
 
    当然不能简单地加上符号位。如果已经记住商应该是负数,绝对值相除除的结果就要用NEG 指令来取负。
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

32
 
真的非常谢谢你,前两天上网不方便,没有及时回复你的回答,抱歉
我想问你一下,这个除以100,除10的方法仅限于十进制数,如果我的除法想做的应用范围更广一些,我知道有一种移位的方法,但是我想了很久都想不出用移位方法怎么实现,请教你一下,谢谢!!
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

33
 
     不太明白你的意思,机内存储的是2 进制码,要化为表示10数的字符串输出,才需要除1000,100,10 等等。除此而外你还需要做什么呢?
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

34
 
       刚才才看到短信。我觉得首先要明确,存储在变量中的数是什么格式?希望转换成什么格式?一定要把这个前提讲的清清楚楚,才谈得到算法问题。
    IEEE 大概是指一种浮点数格式。我们前几天讨论的,是 Q0-Q15,也是一种表示实数的格式。由于DSP上用Q0 -Q15 格式比较多,也比较方便。所以我想当然以为你要转换的也可能是这种格式。如果是IEEE格式的由数符,尾数,阶码组成浮点格式数,转换方法就完全不同了。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

35
 
确实是你说得这个问题,但是我不太明白你说的IEEE格式格式数(由数符,尾数,阶码组成浮点)根据我刚才说的,你认为我要转换的二进数是数为IEEE格式数么?
问题1:这种数在哪能查到它的解释,c语言书可以么?
问题2:这种格式数是不是也可以转换为十进制或其他进制呢?
问题3:如果将这种格式的数转换为十进制的数是不是咱们原来说的方法就不可行了?
问题4:TI公司好像有除法的例子,用的是NORM指令,好像就是针对这种IEEE格式数的,你能帮我解释一下他的算法么?
谢谢你了高手,mlwang_km~~~
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

36
 
    1 .我查了手边的 C 语言书,没讲 float,double (应该就是IEEE) 等的格式。我以前是看过这方面的资料的,不知还找得到否。
  2。任何格式的数,都可以相互转换的,只要搞清楚格式定义。
  3。如果是IEEE格式浮点数,转换方法当然完全不一样了。
  4。TI公司这个算法我没有见到,说不清。
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

37
 
谢谢你,我想再问一下,我编了个超小的程序,在编译的时候没有问题,但是只要一build就出现错误,麻烦你帮我看一看好么?谢谢了
下面的是错误提示:
\"d:\\ti\\c2400\\cgtools\\bin\\dspcl\" -g -q -fr\"D:/ti/myprojects/xianshi/Debug\" -d\"_DEBUG\" -v2xx -@\"Debug.lkf\" \"xianshi.asm\"
<xianshi.asm>

\"d:\\ti\\c2400\\cgtools\\bin\\dspcl\" -@\"Debug.lkf\"
<Linking>
TMS320C24xx COFF Linker                 Version 7.01
Copyright (c) 1987-2002  Texas Instruments Incorporated


undefined                        first referenced
symbol                              in file
---------                        ----------------
EXIT                             D:\\ti\\myprojects\\xianshi\\Debug\\xianshi.obj
>> symbol referencing errors - ./Debug/xianshi.out not built

Build Complete,
  1 Errors, 0 Warnings, 0 Remarks.
 
 
 

回复

92

帖子

0

TA的资源

一粒金砂(初级)

38
 
    你在 xianshi 程序里用到符号 EXIT(不知是个变量,还是函数?好像是函数),却没有定义。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

39
 
嗯,是的,没有错误了,谢谢
可是为什么我用.ref会出错,而用.def定义就不会出错呢?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表